Laravel 对含重复数据的集合按controlNumber分组汇总shipment.qty方法
实现代码(Laravel Collection 写法)
$result = $collection->groupBy('controlNumber') ->map(function ($group) { $baseRecord = $group->first(); $baseRecord['shipment']['qty'] = $group->sum('shipment.qty'); return $baseRecord; }) ->values() ->toArray();
逻辑说明
- 先用
groupBy('controlNumber')将所有记录按controlNumber字段分组,相同controlNumber的记录会被归集到同一个分组 - 遍历每个分组,取分组第一条记录作为输出的基础结构(匹配你示例中保留第一条id、其他属性不变的需求),再计算当前分组所有记录的
shipment.qty总和,替换基础记录中的qty值 - 最后用
values()重置数组键为连续的数字索引,和你期望的输出结构完全对齐
可选调整
如果同分组内非qty字段存在不一致,可自行调整基础记录的取值规则,比如要取分组内id最大的记录作为基础,就把$group->first()改成$group->sortByDesc('id')->first()即可。
内容的提问来源于stack exchange,提问作者raza9798
相关产品推荐
相关产品推荐

