我正在尝试看看这是否可能,但我希望获得集合集合中某项的字段总和。
我的控制器中有以下内容:
$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');,我将收到这笔钱。但是,我该如何从联系人模型开始呢?或者,这是可能的,因为它将需要通过收集捐款才能获得monetary_donations的收藏?我正在尝试获得所有联系人捐款(和货币捐款)的报告,并输出该特定时期的monetary_donations的小计。
发布于 2019-01-08 09:43:47
Sum接受闭包作为参数。所以你可以这样做:
$sum = $donations->sum(function ($donation) {
return $donation->monetary_donations->sum('amount');
});或更高一级(来自$contacts):
$sum = $contacts->sum(function ($contact) {
return $contact->donations->sum(function ($donation) {
return $donation->monetary_donations->sum('amount');
});
});编辑:
我还建议你尽快加载你的关系,用SQL过滤掉没有捐赠的联系人,而不是收藏:
$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();https://stackoverflow.com/questions/54084125
复制相似问题