Yii2 como salvar dados JSON recebidos no banco de dados
Eu criei umAPI
o que me retorna uma matriz de dados emjson
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 )
Agora, estou tentando salvá-lo no meuDB
$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']);
No código acima, existem duas se as condições
isSaved ($ item-> MSN)
$meter = MeterPing::find()->where(['meter_msn' => $msn])->one();
if($meter)
return true;
return false;
A partir da função acima, estou tentando verificar se a entradaMSN
já está salvo ou não. Se já estiver presente na tabela, ele não salvará esse particularMSN
mas sim salve todos os outrosMSN
que não são salvos anteriormente.
ogpCreated ($ item-> MSN)
$meter = Ogpdetail::find()->where(['meter_serial' => $msn])->one();
if($meter)
return true;
return false;
A partir da função acima, estou tentando verificar se a entradaMSN
éOGP
criado ou não. Novamente, não deve salvar nenhumMSN
o que não éOGP
criado.
Agora, quando eu tento executar issoCreate
função, ele salva apenas um registro por vez.
Eu acho que há algum problema emif..... elseif
isso permite salvar apenas uma entrada. Mas não tenho certeza disso.
Atualização 1
Tentei remover as verificações e salvar os dados recebidos, mas ainda assim, ele salva apenas um registro
Como posso salvar todo o conteúdo recebidoJSON
dados no meuDB
com todos os cheques funcionando?