集合集合中的“项目总和”字段

时间:2019-01-08 01:28:12

标签: laravel laravel-5

我试图查看是否有可能,但是我想获取集合集合中某个项目的字段总和。

我的控制器中包含以下内容:

    $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();
    });

我的捐赠班级有以下内容:

public function monetary_donations(){
    return $this->hasMany('App\Payments_Distribution', 'donation_id','id');
}

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

如果我直接来自捐赠模型,我将以$donation->monetary_donations->sum('amount');的形式获得货币捐赠的总和,我将收到总和。但是我将如何从Contact模型中做到这一点?还是考虑到它需要经过一系列捐赠才能达到money_donations的收集,这是否有可能?我正在尝试获取所有联系人捐款(和金钱捐款)的报告,并输出该特定时期的money_donations小计。

1 个答案:

答案 0 :(得分:1)

Sum接受闭包作为参数。因此,您可以执行以下操作:

let utc = TimeZone(abbreviation: "UTC")!
let now = Calendar.current.dateComponents(in: utc, from: Date())

或更高一级(来自$sum = $donations->sum(function ($donation) { return $donation->monetary_donations->sum('amount'); }); ):

$contacts

编辑:

我还建议您急于加载您的关系并过滤掉联系人,而无需使用SQL而不是捐款进行捐赠:

$sum = $contacts->sum(function ($contact) {
    return $contact->donations->sum(function ($donation) {
        return $donation->monetary_donations->sum('amount');
    });
});