我试图查看是否有可能,但是我想获取集合集合中某个项目的字段总和。
我的控制器中包含以下内容:
$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小计。
答案 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');
});
});