Laravel - 从数据透视表中获取额外的列值
Posted
技术标签:
【中文标题】Laravel - 从数据透视表中获取额外的列值【英文标题】:Laravel - Get additional column value from pivot table 【发布时间】:2020-06-12 11:55:39 【问题描述】:我有具有多对多关系的 Stores 和 Medicines 表。使用attach
和sync
可以正常存储和更新。表结构如下所示。我想检索额外列 (expired)
的值。
store_id | medicine_id | expired
1 2 1
1 3 0
我还需要计算像这样过期的药物总数
两个模型都有withPivot('expired')
模型关系。
控制器
public function show($id)
$medicine = Medicine::findOrFail($id);
$stores = $medicine->findorfail($id)->stores()->get();
return view ('medicines', compact('medicine', 'stores'));
查看
我可以用这个列出药物
@foreach ($stores as $store)
$store->value('name')
!! $store->pivot->expired == 1 ?
'Expired' : 'Not-Expired' !!
<a href=" route('store', $store->id) ">View</a>
@endforeach
我试着像这样计算城市:
@foreach($stores as $store)
($store->pivot->expired==1)
@endforeach
它给出 1 1. 我如何计算已过期 Cetamols 的城市总数?
【问题讨论】:
【参考方案1】:以下应该有效:
Sum
在关系集合上:
$stores->sum('pivot.expired');
Sum
在查询生成器上:
Medicine::findOrFail($id)->stores()->sum('expired');
此外,您的控制器代码目前没有多大意义,可以简化为:
public function show($id)
$medicine = Medicine::findOrFail($id);
$stores = $medicine->stores;
return view('medicines', compact('medicine', 'stores'));
我删除了对findOrFail()
的第二次调用并删除了get()
,因为它是不必要的。
【讨论】:
以上是关于Laravel - 从数据透视表中获取额外的列值的主要内容,如果未能解决你的问题,请参考以下文章
从 Laravel 中的数组向数据透视表中的额外列添加条件值