You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel API资源传递对象数组报错:Attempt to read property 'code' on array

解决Laravel API资源处理数组时的"Attempt to read property 'code' on array"错误

问题原因

你通过json_decode($response->getBody(), true)将第三方API返回的JSON转为了关联数组,但Laravel的API资源默认是为Eloquent模型对象设计的。当你把数组传入BankResource::collection()时,资源类中的$this指向的是数组元素,使用对象属性访问符->读取code和name自然会报错。

另外你的BankResource代码存在字段名错误:数据里是name字段,但你写的是$this->bank,这也会导致后续问题。


解决方案

方案1:将JSON解码为对象(推荐)

修改控制器中的JSON解码逻辑,去掉json_decode的第二个参数(默认返回stdClass对象):

$banks = json_decode($response->getBody()); // 移除true参数,返回对象而非数组

同时修正BankResource中的字段名错误:

public function toArray(Request $request): array
{
    return [
        "code" => $this->code,
        "name" => $this->name // 修正为数据中的name字段
    ];
}

方案2:保持数组格式,改用数组索引访问

如果需要保留数组格式,直接在资源类中用数组索引读取值:

public function toArray(Request $request): array
{
    return [
        "code" => $this['code'],
        "name" => $this['name'] // 修正字段名
    ];
}

额外检查

确认$banks["data"]确实对应你提供的示例数组结构,确保第三方API返回的JSON中data字段包含目标数据集合,避免因返回结构不符导致的其他问题。

内容的提问来源于stack exchange,提问作者etranz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 02:22:36