Laravel从API获取数组数据存入数据库时遇属性读取错误
问题解决:Laravel存储API数组数据报错“尝试对整数读取属性'invoice'”
错误原因
- 遍历对象错误:你的
$responses是单个API响应的关联数组(包含status、message、consignment三个键),而非多个数据项的集合。foreach ($responses as $response)会依次遍历出200、成功提示字符串、consignment数组,当遍历到整数200时,尝试读取$response->invoice就会触发“对整数读取属性”的错误。 - 数据访问方式错误:API返回的是数组结构,你却用了对象属性访问符
->,正确的数组访问应该用['键名'],或者先将数组转为对象。
正确代码实现
方案一:直接使用数组索引访问(推荐)
// 提取出需要的consignment数据 $consignment = $responses['consignment']; $curDatains = new CurrierData(); $curDatains->orderId = 1; $curDatains->orderInvoice = $consignment['invoice']; $curDatains->consignment_id = $consignment['consignment_id']; $curDatains->tracking_code = $consignment['tracking_code']; $curDatains->status = $consignment['status']; $curDatains->save();
方案二:将数组转为对象后访问
如果习惯使用对象属性的方式访问,可以先把consignment数组转为对象:
$consignment = (object)$responses['consignment']; $curDatains = new CurrierData(); $curDatains->orderId = 1; $curDatains->orderInvoice = $consignment->invoice; $curDatains->consignment_id = $consignment->consignment_id; $curDatains->tracking_code = $consignment->tracking_code; $curDatains->status = $consignment->status; $curDatains->save();
补充说明
如果后续API会返回多个consignment的集合(比如consignment是数组数组),再考虑使用foreach遍历,但当前场景下单个响应只需要提取consignment字段即可。
内容的提问来源于stack exchange,提问作者Md. Shiam Hossain
相关产品推荐
相关产品推荐

