Laravel Sum 收集重复数据
Posted
技术标签:
【中文标题】Laravel Sum 收集重复数据【英文标题】:Laravel Sum on collection with duplicates data 【发布时间】:2021-12-14 01:25:56 【问题描述】:我有一个由多个数据组成的对象,因为controlNumber
每个controlNumber
有shipment.qty
我想要的是合计每个相同controlNumber
的qty
并显示一个controlNumber
的总数量。
收藏在下方
"collection": [
"id": 983,
"controlNumber": 4498818,
"ItemNumber": "PS2W12077",
"shipment":
"id": 27,
"Item": "PS2W12077",
"ColorCode": "GRPFR",
"qty": 1638
,
"id": 982,
"controlNumber": 4498818,
"ItemNumber": "PS2W12077",
"shipment":
"id": 27,
"Item": "PS2W12077",
"ColorCode": "GRPFR",
"qty": 1638
,
"id": 936,
"controlNumber": 4498815,
"ItemNumber": "PS2T01096",
"shipment":
"id": 11,
"Item": "PS2T01096",
"ColorCode": "MALDI",
"qty": 1212
,
]
controlNumber 4498818
有两个装运数据和两个 qty
我想要显示一个 controlNumber
和 qty
的总数 3276
我已经退休的是返回总数qty
of all controlNumber
$result = $collection->pipe(function ($collection)
return collect([
'shipment_qty' => $collection->sum('shipment.qty'),
]);
);
输出应该如下
"collection": [
"id": 983,
"controlNumber": 4498818,
"ItemNumber": "PS2W12077",
"shipment":
"id": 27,
"Item": "PS2W12077",
"ColorCode": "GRPFR",
"qty": 3276
,
"id": 936,
"controlNumber": 4498815,
"ItemNumber": "PS2T01096",
"shipment":
"id": 11,
"Item": "PS2T01096",
"ColorCode": "MALDI",
"qty": 1212
,
]
【问题讨论】:
【参考方案1】:您可以使用unique 收集方法根据控制编号值仅获取唯一项:
$uniqueCollection=$collection->unique('controlNumber');
$result=$collection2->sum(function ($item)
return $item->shipment->qty;
);
【讨论】:
这个计算总出货数量,请再看问题 不,它只计算唯一的集合行,请参阅:phpsandbox.io/e/x/… 我已经更新了问题,输出应该是什么样子@omr【参考方案2】:通过这个你得到一个集合,其中键是controlNumber
,值是shipment->qty
的总和。
$collection->mapToGroups(function ($item)
return [$item->controlNumber => $item->shipment->qty];
)->map->sum();
【讨论】:
以上是关于Laravel Sum 收集重复数据的主要内容,如果未能解决你的问题,请参考以下文章