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

Laravel中如何关联3张表查询订单数据,解决获取商品属性报错问题

问题解决步骤

错误原因

你遇到的Trying to get property 'name' of non object错误是因为:

  1. 没有在Order模型中定义和Product表的关联关系,直接用外键字段id_product(仅存储商品ID数值,不是关联对象)调用属性
  2. 查询订单时没有预加载关联的商品数据
  3. 视图中字段写错:Order表字段是date而非data

第一步:在Order模型中定义关联关系

在app/Models/Order.php中添加和Product表的关联方法:

// Order模型内新增方法
public function product()
{
    // 第二个参数指定自定义外键名id_product,Laravel默认会找product_id,必须手动指定
    return $this->belongsTo(Product::class, 'id_product');
}

第二步:修改控制器查询代码,预加载关联数据

修改OrderController中的查询逻辑,用with()预加载商品关联,避免N+1查询问题:

// 注意Order模型首字母大写,with参数对应上一步定义的关联方法名product
$orderdetail = Order::where('id_user', auth()->id())->with('product')->get();

第三步:修改Blade模板代码

调整字段调用方式,同时添加容错逻辑避免商品被删除时再次报错:

<?php $no=1 ?> 

@foreach ($orderdetail as $order)
{{$no++}}
{{$order->id}}
{{-- 修正字段错误:原字段是date不是data --}}
{{$order->date}}
{{-- 调用关联对象product的name属性,optional是容错方法,PHP8以上也可以写$order->product?->name --}}
{{optional($order->product)->name}}
{{$order->price}}
{{$order->total_order}}
{{$order->total_price}}
@endforeach

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.08 15:12:01