簡體   English   中英

Yii2如何將接收到的JSON數據保存到數據庫中

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM