【问题标题】:Laravel Sum on collection with duplicates dataLaravel Sum 收集重复数据
【发布时间】: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
            }
        },
 ]

【问题讨论】:

    标签: laravel eloquent laravel-8 laravel-7 laravel-6


    【解决方案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();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-01-30
      • 2019-12-02
      • 1970-01-01
      • 2017-07-23
      • 2014-11-13
      • 2017-11-10
      • 2011-07-27
      • 2021-06-08
      相关资源
      最近更新 更多