Laravel对重复数据的集合求和



我有一个对象,它由多个数据组成,如controlNumber,每个controlNumber都有shipment.qty,我想要的是将每个相同controlNumberqty加起来,并显示一个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
}
},
]

controlNumber4498818有两个发货数据和两个qty,我想显示的是一个controlNumber3276的总qty

我退出的是返回所有controlNumber的总qty

$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
}
},
]

您可以使用唯一收集方法根据控件编号值获取唯一项:

$uniqueCollection=$collection->unique('controlNumber');
$result=$collection2->sum(function ($item){
return $item->shipment->qty;
});

这样你就得到了一个集合,其中键是controlNumber,值是shipment->qty的和。

$collection->mapToGroups(function ($item) {
return [$item->controlNumber => $item->shipment->qty];
})->map->sum();

最新更新