我在Laravel中有一个两层的小组,想对每个最后一组的数目求和。
该模型类似于:
Plan
=====================
id | user_id | game_id | option | amount
我的查询是:
$allbets = DB::table('plan')
->select('plan.amount', 'plan.option', 'users.name')
->join('users', 'plan.user_id', '=', 'users.id')
->where(['plan.game_id' => $game->id])
->get()
->groupBy('name')
->map(function ($option) {
return $option
->groupBy('option');
})
;
我需要总结每个第二级“选项”组的“金额”。 实际结果是:
username1 =>
option1 =>
0 =>
username1
option1
10
1 =>
username1
option1
12
username2 =>
option1 =>
0 =>
username2
option1
10
1 =>
username1
option1
12
option2 =>
0 =>
username2
option2
5
1 =>
username1
option2
6
我需要这个结果:
username1 =>
option1 =>
22
username2 =>
option1 =>
22
option2 =>
11
答案 0 :(得分:0)
您可以使用laravel reduce()
方法https://laravel.com/docs/5.7/collections#method-reduce。
在地图功能内部,在分组之后添加reduce,如下所示:
->map(function ($option) {
return $option
->groupBy('option')
->map(function($group) {
// Loop through each group and reduce them.
$group->reduce(function($carry, $item) {
// Assume that we always want the last value by using php end() function on array.
return $carry + end($item);
}, 0);
});
});
我还没有测试过,所以如果有问题让我知道,我会更新答案。