Laravel集合嵌套组获取不同的字段数

时间:2017-09-19 14:55:26

标签: laravel collections group-by

有如下数据。

"2017-08-13": [
     {
      "cancelledByDriver": 0,
      "busy": 0,
      "cancelledByRider": 0,
      "acceptedByDriver": 1,
      "requestDate": "2017-08-12T21:03:29.754Z"
     },
     {
      "cancelledByDriver": 0,
      "busy": 0,
      "cancelledByRider": 0,
      "acceptedByDriver": 1,
      "requestDate": "2017-08-12T21:08:28.244Z"
     }
],
"2017-08-14": [],
"2017-08-15": [],
"2017-08-18": [],
"2017-08-20": [],
"2017-08-21": [],
"2017-08-22": [],
"2017-08-23": [],
"2017-08-24": [],
"2017-08-25": []

我想在每个日期的字段1中打印值的数量。在日期中,有多少个cancelledByDriver,busy,cancelByRider和acceptedByDriver(value = 1)。

示例:

"2017-08-13": [
     {
      "cancelledByDriver": 0,
      "busy": 0,
      "cancelledByRider": 0,
      "acceptedByDriver": 2,
     }
]

我的代码:

$days = $tripRequests->groupBy(function($item) {
                 return date('Y-m-d', strtotime($item['requestDate']));
            })->map(function ($item, $key) {
                return collect($item);
        });

1 个答案:

答案 0 :(得分:0)

我不确定你是否解决了这个问题。但我对此有同样的疑问。最后,我根据Laravel的收藏指南找到了答案。

$days = $tripRequests->groupBy(function($item) {
    return date('Y-m-d', strtotime($item['requestDate']));
})->map(function ($item) {
    return $item->sum('cancelledByDriver') ;
});

首先,方法groupBy()能够按给定的键对集合进行分组,这是您正在做的事情。然后使用方法map(),您可以通过遍历与日期关联的每个项目(例如2017-08-13)来重新映射集合对象。您需要做的是致电sum(),以便将cancelledByDriver加起来。

您将获得一个新的集合,其总和为cancelledByDriver group by - 日期。

https://laravel.com/docs/5.6/collections#method-sum