【问题标题】:Array to string conversion - Laravel 5.6 Error数组到字符串的转换 - Laravel 5.6 错误
【发布时间】:2018-09-11 19:40:34
【问题描述】:

我正在尝试使用 JSON 文件中的值更新数据库中的值:

代码:

$jsonData = file_get_contents($jsonFile);
        $data = json_decode($jsonData, true);

        //check if hospital exist
        $name = explode(' ',trim($data['organisationUnits']['organisationUnit']['name']));
        // echo $name[0];
        $query = Hospital::where('h_name',  'LIKE' , '%' . $data['organisationUnits']['organisationUnit']['name'] . '%')->first();

        if($query){

            // echo "\n yupo";
            $h_id = $query->id;
            $h_slug = $query->h_slug;
            $nr_orgUnit = $query->nr_orgUnit;

            // echo $nr_orgUnit;
            $updateHospital = Hospital::find($h_id);
            $updateHospital->h_name = $data["organisationUnits"]["organisationUnit"]["name"];
            $updateHospital->h_short_name = $data["organisationUnits"]["organisationUnit"]["shortName"];
            $updateHospital->h_code = $data["organisationUnits"]["organisationUnit"]["code"];
            $updateHospital->h_opening_date = $data["organisationUnits"]["organisationUnit"]["openingDate"];
            $updateHospital->h_closed_date = $data["organisationUnits"]["organisationUnit"]["closedDate"];
            $updateHospital->h_active = $data["organisationUnits"]["organisationUnit"]["active"];
            $updateHospital->h_comment = $data["organisationUnits"]["organisationUnit"]["comment"];
            $updateHospital->h_geo_code = $data["organisationUnits"]["organisationUnit"]["geoCode"];
            $updateHospital->h_last_updated = $data["organisationUnits"]["organisationUnit"]["lastUpdated"];
            $updateHospital->save();
} else {
            // echo 'error';
        }

JSON 数据:

 {"organisationUnits":{
  "organisationUnit":{
     "id":"01",
     "uuid":{

     },
     "name":"Isagehe Dispensary",
     "shortName":"Isagehe Dispensary ",
     "code":"17-04-0118",
     "openingDate":"1990-01-01",
     "closedDate":{

     },
     "active":"true",
     "comment":{

     },
     "geoCode":{

     },
     "lastUpdated":{

     }
  }
}
}

当我尝试运行代码时,我收到以下错误:

数组到字符串的转换(SQL:update `ag_hospitals` set `h_closed_date` = , `h_active` = true, `h_comment` = , `h_geo_code` = , `h_last_updated` = where `id` = 41)”

我哪里错了?

注意我也尝试过以下方式更新:

$updateHospital = Hospital::where('id', $h_id)->update([
                                'h_name' => $data['organisationUnits']['organisationUnit']['name'], 
                                'h_short_name' => $data['organisationUnits']['organisationUnit']['shortName'], 
                                'h_code' => $data['organisationUnits']['organisationUnit']['code'], 
                                'h_opening_date' => $data['organisationUnits']['organisationUnit']['openingDate'], 
                                'h_closed_date' => $data['organisationUnits']['organisationUnit']['closedDate'], 
                                'h_active' => $data['organisationUnits']['organisationUnit']['active'], 
                                'h_comment' => $data['organisationUnits']['organisationUnit']['comment'], 
                                'h_geo_code' => $data['organisationUnits']['organisationUnit']['geoCode'], 
                                'h_last_updated' => $data['organisationUnits']['organisationUnit']['lastUpdated']
                            ]);

【问题讨论】:

  • $data["organisationUnits"]["organisationUnit"]["closedDate"] 是字符串吗?试试看。
  • $data['organisationUnits']['organisationUnit']['comment']$data['organisationUnits']['organisationUnit']['geoCode'] 是空对象,而不是字符串。您可能需要检查这些值是否为空,并写入一个空字符串或 null 而不是该值。
  • 我已将它们设置为 NULL 并且有效,如何将对象转换为 $data['organisationUnits']['organisationUnit']['comment']$data['organisationUnits']['organisationUnit']['geoCode'] 上的字符串?
  • 对于空对象,只需使用empty($data['organisationUnits']['organisationUnit']['comment']) ? '' : $data['organisationUnits']['organisationUnit']['comment']。当有数据时,您可能需要仔细检查结构以找出它是字符串、对象还是数组,然后从那里开始。

标签: php json laravel laravel-5


【解决方案1】:

您需要在将 JSON 数据存储为数组的模型中定义该属性。 示例:

protected $casts = [
        'column_name' => 'array'
    ];

【讨论】:

    猜你喜欢
    • 2019-05-01
    • 2022-01-25
    • 2016-09-01
    • 1970-01-01
    • 2014-12-14
    • 1970-01-01
    • 1970-01-01
    • 2018-08-03
    • 1970-01-01
    相关资源
    最近更新 更多