[英]Yii2 how to save received JSON data into database
我創建了一個API
,該API
返回了json
的數據數組
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 )
現在,我正在嘗試將其保存在DB
$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']);
在上面的代碼中,有兩個if條件
isSaved($用品- > MSN)
$meter = MeterPing::find()->where(['meter_msn' => $msn])->one();
if($meter)
return true;
return false;
從上面的功能,我試圖檢查傳入的MSN
是否已經保存。 如果表中已經存在該MSN
,則不會保存該特定的MSN
但是會保存以前未保存的所有其他MSN
。
ogpCreated($用品- > MSN)
$meter = Ogpdetail::find()->where(['meter_serial' => $msn])->one();
if($meter)
return true;
return false;
通過以上功能,我試圖檢查傳入的MSN
是否為OGP
創建的。 同樣,它不應保存不是OGP
創建的任何MSN
。
現在,當我嘗試運行此Create
函數時,一次只能保存一條記錄。
我認為if..... elseif
中存在一些問題,它僅允許保存一個條目。 但是我不確定。
更新1
我試圖刪除支票,然后保存傳入的數據,但仍然只保存一條記錄
如何在所有檢查正常的情況下將接收到的全部JSON
數據保存到DB
?
您需要添加模型初始化$m=new YourModel();
在foreach
循環中,在elseif($this->ogpCreated($item->MSN))
,這就是為什么它僅保存一條記錄的原因
foreach ($record as $item){
if($this->isSaved($item->MSN)){
return false;
}
else if($this->ogpCreated($item->MSN)){
$m= new YourModel();
您也可以在curl命令中使用$m
,最好發布所有代碼,以防遇到一些邏輯錯誤,需要相應地調整代碼,或者在foreach
更改$m
變量的名稱
除此之外,您可以將此擴展Yii2-Curl
用於curl命令,它將以更加可讀的方式為您的代碼提供更大的靈活性
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.