首页 > 解决方案 > 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 过期的城市总数?

标签: phplaravelloopsormpivot-table

解决方案


以下应该有效:

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()因为它是不必要的。


推荐阅读