如何通过Laravel Eloquent关联3张表在视图中显示商品名称?
解决方案:在采购记录视图中显示商品名称
这事儿其实很简单,咱们通过三层关联就能拿到商品名称,分三步来做就行:
- 给Productquantity模型添加与Product的关联
因为你的Purchaserecord已经关联了Productquantity,现在需要让Productquantity也关联上Product,这样才能通过采购记录一路找到商品名称。打开app/Productquantity.php,添加这个关联方法:
public function product() { return $this->belongsTo('App\Product', 'prod_id', 'id'); }
- 查询时预加载关联,避免性能问题
如果直接在视图里调用关联,会触发N+1查询(循环一次查一次数据库),所以在控制器获取采购记录的时候,用with()方法预加载两层关联:
// 控制器里获取数据的代码 $dataPurchaseRecord = Purchaserecord::with('productquantity.product')->get();
这样系统会一次性把所有需要的数据都查出来,性能会好很多。
- 在视图中通过关联链获取商品名称
现在在循环里就可以顺着关联拿到商品名称了,修改你的视图代码:
@foreach($dataPurchaseRecord as $Record) <tr> <!-- 这里就是商品名称的输出 --> <td>{{ $Record->productquantity->product->product_name }}</td> <!-- 你的其他字段继续保留即可 --> <td>{{ $Record->quantity }}</td> <td>{{ $Record->amount }}</td> </tr> @endforeach
额外提示:处理关联为空的情况
如果存在采购记录对应的商品规格(Productquantity)或者商品(Product)被删除的情况,直接调用会报错。可以用PHP的可选链操作符和空合并运算符来处理:
<td>{{ $Record->productquantity?->product?->product_name ?? '无商品信息' }}</td>
这样当关联不存在时,会显示无商品信息而不是抛出错误。
内容的提问来源于stack exchange,提问作者EasyWay
相关产品推荐
相关产品推荐

