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

Laravel同分类商品展示报错:Undefined property: LengthAwarePaginator::$cat_id

问题分析与解决方案

嘿,我一眼就看出问题所在啦!你用Paginate(1)获取单个商品的时候,得到的不是单个商品模型实例,而是一个LengthAwarePaginator分页对象——哪怕只分页1条数据,它本质还是个集合容器,所以直接访问$product->cat_id肯定会报未定义属性的错。

修正后的控制器代码

public function product($id){ 
    // 使用first()获取单个商品模型,替代Paginate(1)
    $product = Products::where('pro_id',$id)->first(); 
    
    // 新增判断:如果商品不存在,直接返回404页面
    if(!$product) {
        abort(404);
    }
    
    // 获取同分类的相关商品,同时排除当前商品本身
    $products = Products::where('cat_id', $product->cat_id)
                        ->where('pro_id', '!=', $id)
                        ->get(); 
                        
    return view('front.product.product', compact('product','products')); 
}

关键说明

  • 替换Paginate(1)为first():first()会直接返回匹配的第一个商品模型实例,而非分页对象,这样就能正常访问$product->cat_id属性了。
  • 排除当前商品:新增where('pro_id', '!=', $id)可以避免在相关商品列表里显示当前正在查看的商品,更符合用户体验。
  • 商品不存在判断:防止因传入无效id导致$product为null,进而引发后续代码报错。

视图调整提示

原来你在视图里用@foreach遍历$product是不合理的,现在$product是单个商品模型,直接通过$product->pro_name、$product->price这样的方式访问属性即可;而同分类商品集合$products才需要用@foreach遍历:

{{-- 展示当前商品详情 --}}
<h1>{{ $product->pro_name }}</h1>
<p>{{ $product->description }}</p>

{{-- 展示同分类相关商品 --}}
<h3>相关商品</h3>
@foreach($products as $relatedProduct)
    <div class="related-item">
        <a href="{{ route('product', $relatedProduct->pro_id) }}">{{ $relatedProduct->pro_name }}</a>
    </div>
@endforeach

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 03:53:27