Laravel Sum 收集重复数据

Posted

技术标签:

【中文标题】Laravel Sum 收集重复数据【英文标题】:Laravel Sum on collection with duplicates data 【发布时间】:2021-12-14 01:25:56 【问题描述】:

我有一个由多个数据组成的对象,因为controlNumber 每个controlNumbershipment.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
            
        ,
 ]

controlNumber 4498818 有两个装运数据和两个 qty 我想要显示一个 controlNumberqty 的总数 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 收集重复数据的主要内容,如果未能解决你的问题,请参考以下文章

报表生成器 - 执行“Sum()”函数时防止重复数据

在 Laravel 8 中刷新后重复数据

Laravel多数据库[重复]

Laravel多个数据库同时使用所有[重复]

Laravel - 一次多个数据库[重复]

Laravel更改数据库连接[重复]