首页 > 解决方案 > 如何在 groupBy laravel 之后对集合求和

问题描述

我有一个名为detailed如下的集合:

Collection {#1421 ▼
  #items: array:2 [▼
    3943 => Collection {#1419 ▼
      #items: array:2 [▼
        0 => RoomPricingHistory {#923 ▶}
        1 => RoomPricingHistory {#1042 ▶}
      ]
    }
    3944 => Collection {#1420 ▼
      #items: array:2 [▼
        0 => RoomPricingHistory {#1153 ▶}
        1 => RoomPricingHistory {#1264 ▶}
      ]
    }
  ]
}

现在我想获得3943项目的 RoomPricingHistory 和3944ofc 的总和,它可以是 2 个以上的项目,所以我想获得每个集合的总和,我该如何实现?

标签: phplaravel

解决方案


Collectionsum方法可以接受回调,以便您可以定义要计算的内容。在这种情况下,您可以调用sum主集合和回调,这将使您可以访问内部集合,也可以调用sum.

$detailed->sum(function ($group) {
    return $group->sum('sales_price');
});

Laravel 6.x 文档 - 集合 - 可用方法 -sum

由于这不是您要查找的内容,因此您可以使用类似mapWithKeys的方法浏览集合并调用sum组以获取每个组的总和:

$sums = $detailed->mapWithKeys(function ($group, $key) {
    return [$key => $group->sum('sales_price')];
});

Laravel 6.x 文档 - 集合 - 可用方法 -mapWithKeys


推荐阅读