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

Laravel API报Attempt to read property "id" on string错误排查咨询

错误原因
  • 你完全误用了Laravel JsonResource的结构:toArray方法的入参$request是HTTP请求实例,$request->all()返回的是你接口传入的所有请求参数(比如你调用接口传的limit=5、offset=0都是字符串类型的参数值),你循环请求参数自然拿到的都是字符串,尝试读取字符串的id属性就会触发当前报错。
  • 你传进ProductResource的是Product::get()返回的模型集合,但单个JsonResource默认是处理单条模型数据的,你用错了资源的使用方式。
  • JsonResource的toArray方法只需要返回格式化后的数组即可,不需要手动返回response()实例,Laravel会自动将返回的数组转为JSON响应。
修复方案

方案1(官方推荐写法,最规范)

  1. 首先修改ProductResource.php,只处理单条产品数据的格式化:
class ProductResource extends JsonResource
{
    public function toArray($request)
    {
        return [
            'id' => "p" . $this->id,
            'name' => $this->name,
            'slug' => $this->slug,
            'regular_price' => $this->regular_price,
            'sale_price' => $this->sale_price,
            'SKU' => $this->SKU,
            'stock_status' => $this->stock_status,
            'quantity' => "p" . $this->quantity,
            'image' => $this->url,
            'images' => $this->url,
            'category_id' => $this->category_id,
        ];
    }
}
  1. 然后修改ProductController.php中返回资源的代码,用collection方法处理集合:
    把两处return new ProductResource($products);改成return ProductResource::collection($products);即可。

方案2(非规范写法,可快速修复)

直接修改ProductResource.php的toArray方法,循环你传入的集合即可(注意你传入的集合存在$this->resource属性里,不是$request里):

class ProductResource extends JsonResource
{
    public function toArray($request)
    {
        $responses = [];
        foreach ($this->resource as $product) {
            $responses[] = [
                'id' => "p" . $product->id,
                'name' => $product->name,
                'slug' => $product->slug,
                'regular_price' => $product->regular_price,
                'sale_price' => $product->sale_price,
                'SKU' => $product->SKU,
                'stock_status' => $product->stock_status,
                'quantity' => "p" . $product->quantity,
                'image' => $product->url,
                'images' => $product->url,
                'category_id' => $product->category_id,
            ];
        }
        return $responses;
    }
}

内容的提问来源于stack exchange,提问作者May Yadanar Tun

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 10:15:05