首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >集合集合中的项目总和字段

集合集合中的项目总和字段
EN

Stack Overflow用户
提问于 2019-01-08 09:28:12
回答 1查看 41关注 0票数 0

我正在尝试看看这是否可能,但我希望获得集合集合中某项的字段总和。

我的控制器中有以下内容:

代码语言:javascript
复制
    $prefiltered_contacts = Contact::with(['donations' => function ($query) use ($request) {
            $query->whereMonth('date_received', $request->month)
                ->whereYear('date_received', $request->year);
    }])->get();

    $contacts = $prefiltered_contacts ->filter(function ($contact) {
        return $contact->donations->isNotEmpty();
    });

我的捐赠类有以下内容:

代码语言:javascript
复制
public function monetary_donations(){
    return $this->hasMany('App\Payments_Distribution', 'donation_id','id');
}

现在,最后一部分是在Payments_Distribution类中,有一个标题为amount的字段。

如果我直接来自捐赠模型,我将访问货币捐赠的总和作为$donation->monetary_donations->sum('amount');,我将收到这笔钱。但是,我该如何从联系人模型开始呢?或者,这是可能的,因为它将需要通过收集捐款才能获得monetary_donations的收藏?我正在尝试获得所有联系人捐款(和货币捐款)的报告,并输出该特定时期的monetary_donations的小计。

EN

回答 1

Stack Overflow用户

发布于 2019-01-08 09:43:47

Sum接受闭包作为参数。所以你可以这样做:

代码语言:javascript
复制
$sum = $donations->sum(function ($donation) {
    return $donation->monetary_donations->sum('amount');
});

或更高一级(来自$contacts):

代码语言:javascript
复制
$sum = $contacts->sum(function ($contact) {
    return $contact->donations->sum(function ($donation) {
        return $donation->monetary_donations->sum('amount');
    });
});

编辑:

我还建议你尽快加载你的关系,用SQL过滤掉没有捐赠的联系人,而不是收藏:

代码语言:javascript
复制
$contacts = Contact::with(['donations' => function ($query) use ($request) {
        $query
            ->with('monetary_donations')
            ->whereMonth('date_received', $request->month)
            ->whereYear('date_received', $request->year);
}])
    ->whereHas('donations') // Filter out those without donations with SQL
    ->get();
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54084125

复制
相关文章

相似问题

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