Yii2 cómo guardar los datos JSON recibidos en la base de datos
He creado unaAPI
que me devuelve una matriz de datos enjson
Array ( [0] => stdClass Object ( [MSN] => 002999001207 [PingDateTime] => 2018-05-04T16:33:27 [PingValue] => 22 ) [1] => stdClass Object ( [MSN] => 002999001195 [PingDateTime] => 2018-05-04T16:34:11 [PingValue] => 21 ) [2] => stdClass Object ( [MSN] => 002999001180 [PingDateTime] => 2018-05-04T14:42:40 [PingValue] => 20 ) [3] => stdClass Object ( [MSN] => 002999001157 [PingDateTime] => 2018-05-04T14:42:52 [PingValue] => 30 ) [4] => stdClass Object ( [MSN] => 002999001142 [PingDateTime] => 2018-05-04T16:37:19 [PingValue] => 13 ) [5] => stdClass Object ( [MSN] => 002999001138 [PingDateTime] => 2018-05-04T16:32:22 [PingValue] => 20 ) [6] => stdClass Object ( [MSN] => 002999001114 [PingDateTime] => 2018-05-04T16:32:52 [PingValue] => 22 )
Ahora, estoy tratando de guardarlo en miDB
$curl = curl_init($api_url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_TIMEOUT, 1000);
curl_setopt($curl, CURLOPT_HTTPHEADER, array('Key'));
$m->start_date_time = date('Y-m-d h:i:s');
$curl_response = curl_exec($curl);
$json = json_decode($curl_response);
$record = $json->data;
foreach ($record as $item){
if($this->isSaved($item->MSN))
{
return false;
}
else if($this->ogpCreated($item->MSN))
{
$m->end_date_time = date('Y-m-d h:i:s');
$m->meter_msn = $item->MSN;
$m->meter_id = Meters::msnmapToid($m->meter_msn);
$m->sub_div_code = Ogpdetail::msnTosubdiv($item->MSN);
$m->sub_div_name = Ogpdetail::subDivToName($m->sub_div_code);
$m->meter_ping_date_time = str_replace('T', ' ', $item->PingDateTime);
$m->save();
}
}
return $this->redirect(['index']);
En el código anterior, hay dos si las condiciones
isSaved ($ item-> MSN)
$meter = MeterPing::find()->where(['meter_msn' => $msn])->one();
if($meter)
return true;
return false;
Desde la función anterior, estoy tratando de verificar si el @ entranMSN
ya está guardado o no. Si ya está presente en la tabla, no guardará esa @ particulMSN
pero sí, guarde todos los demásMSN
que no se guardaron anteriormente.
ogpCreated ($ item-> MSN)
$meter = Ogpdetail::find()->where(['meter_serial' => $msn])->one();
if($meter)
return true;
return false;
Desde la función anterior, estoy tratando de verificar que la @ entranMSN
esOGP
creado o no. De nuevo, no debería guardar ningunaMSN
lo cual no esOGP
creado
Ahora, cuando trato de ejecutar esteCreate
función solo guarda un registro a la vez.
Creo que hay algún problema enif..... elseif
que solo permite guardar una entrada. Pero no estoy seguro de eso.
Update 1
He intentado eliminar los cheques y luego guardar los datos entrantes, pero aún así, solo guarda un registro
¿Cómo puedo guardar todo el @ recibiJSON
datos en miDB
con todos los cheques funcionando?