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

在Laravel中获取商品数据时出现trying to get property 'id' of non-object错误

错误产生原因
  • 核心原因是 Brands::where('url',$brand_url)->first() 执行后返回了 null:当数据库中不存在 url 字段值等于传入参数 $brand_url 的品牌记录时,first() 方法会返回空值而非 Brands 模型对象,此时访问空值的 id 属性就会触发 trying to get property 'id' of non-object 错误。
解决方法
  • 方法1:使用 firstOrFail() 替代 first()
    Laravel 提供的 firstOrFail() 方法会在查询不到匹配记录时自动抛出404异常,无需手动判断,修改对应行代码即可:
$brands = Brands::where('url',$brand_url)->firstOrFail();
  • 方法2:手动判断查询结果是否存在
    如果需要自定义查询不到品牌时的处理逻辑(比如跳转回列表页加提示),可以手动加存在性校验,同时可以优化冗余的商品查询条件:
public function brandsview($cate_url, $brand_url)
{        
    $brands = Brands::where('url',$brand_url)->first();
    // 校验品牌是否存在
    if (is_null($brands)) {
        // 示例:返回404,也可替换为跳转逻辑
        abort(404, '请求的品牌不存在');
    }
    $products = Products::where('brand_id', $brands->id)
        // 原有两个status判断逻辑重复,保留等于Show的判断即可
        ->where('status', 'Show')
        ->get();
   
    return view('lokalproductspage.brands')
        ->with('brands', $brands)
        ->with('products', $products);
}
  • 额外排查项
    如果确认数据库中存在对应品牌,可检查传入的 $brand_url 参数是否正确:确认路由参数拼写是否和预期一致,数据库中 brands 表 url 字段的存储值是否和传入参数完全匹配(注意大小写、前后空格、特殊字符转义问题)。
可选优化建议

变量名 $brands 语义上是多个品牌,但实际存储的是单个品牌模型,建议修改为 $brand 提升代码可读性。

内容的提问来源于stack exchange,提问作者Lauren James Borja

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 23:24:00