首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Laravel -从枢轴表中获得额外的列值

Laravel -从枢轴表中获得额外的列值
EN

Stack Overflow用户
提问于 2020-06-12 11:55:39
回答 1查看 98关注 0票数 2

我有很多到很多关系的商店和药品桌。使用attachsync可以很好地存储和更新。表的结构如下所示。我想检索额外列(expired)的值。

代码语言:javascript
复制
store_id | medicine_id | expired
    1         2           1
    1         3           0

另外,我需要清点像这样过期的药品总数。

这两种模型都具有withPivot('expired')模型关系。

控制器

代码语言:javascript
复制
public function show($id)
{
    $medicine = Medicine::findOrFail($id);
    $stores = $medicine->findorfail($id)->stores()->get();
    return view ('medicines', compact('medicine', 'stores'));
}

视图

我可以用这个列出药品

代码语言:javascript
复制
@foreach ($stores as $store)
{{ $store->value('name') }}
{!! $store->pivot->expired == 1 ?
'Expired' : 'Not-Expired' !!}
<a href="{{ route('store', $store->id) }}">View</a>
@endforeach

我试着像这样数数城市:

代码语言:javascript
复制
@foreach($stores as $store)
{{ ($store->pivot->expired==1) }}
@endforeach 

它给出了11。我怎样才能统计出已经过期的全部城市呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-06-12 12:17:34

下列措施应能发挥作用:

关系集合上的Sum

代码语言:javascript
复制
$stores->sum('pivot.expired');

查询生成器上的Sum

代码语言:javascript
复制
Medicine::findOrFail($id)->stores()->sum('expired');

此外,您的控制器代码目前没有多大意义,可以简化为:

代码语言:javascript
复制
public function show($id)
{
    $medicine = Medicine::findOrFail($id);
    $stores = $medicine->stores;

    return view('medicines', compact('medicine', 'stores'));
}

我删除了对findOrFail()的第二个调用,并删除了get(),因为它是不必要的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62343789

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档