php - Laravel - 从数据透视表中获取额外的列值
问题描述
我有具有多对多关系的 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 过期的城市总数?
解决方案
以下应该有效:
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()
因为它是不必要的。
推荐阅读
- qnx - 致命:使用 mkxfs 的文件系统溢出错误
- php - 来自变量的Wordpress过滤器?
- python-3.x - 如何显示相距 15 分钟的记录的频率
- azure-devops - VSTS Publish Artifact 为空,MVC Web 应用程序在本地部署
- python - 在 Pandas Dataframe 列中的嵌套字典中搜索和替换
- python - 如何通过用 Python 编写的 CGI 脚本执行 bash 脚本?
- reactjs - ScrollView 不会使用 scrollTo() 水平移动
- jquery - 从超链接渲染局部视图
- jsp - 如何在 EL 中引用 Java 接口常量
- c# - 使用映射而不是 switch/if else 调用具有不同参数的方法