复杂的Laravel 5小组收集

时间:2016-08-25 23:07:18

标签: php arrays laravel grouping

我有一个'事件'系列,它与“网站”有关。 '检验'。

我想要做的是将所有事件分组到'检查日期',然后在此组下将事件分组为'网站'。

  • 检查日期(YYYY-MM-DD)
    • 网站1
      • 活动名称
      • 活动名称
    • 网站2
      • 活动名称
  • 检查日期(YYYY-MM-DD)
    • 网站1
      • 活动名称

一旦我进行了这个分组,我想输出一个像:

这样的数组
[
  'title => 'Site Name: Event Name, Event Name, Event Name', 
  'date' => 'YYYY-MM-DD'
]

这远远高于我的智慧,所以任何帮助将不胜感激! BTW我正在使用Postgresql,所以看来我只能在id上使用groupBy?

我尝试了一些使用groupBy()和map()的东西,这似乎有点让我到处但不知道如何继续:

$events = $events->groupBy('inspection.id')->map(function($item){
    return $item->groupBy('site.id');
});

1 个答案:

答案 0 :(得分:3)

假设结构(简化为数组):

$events = [
   'name' => 'event name',
   'inspection' => ['date' => ' ... '] // relation
   'site' => ['name' => ' ... ']       // relation

这就是你需要的:

$collection
   ->groupBy('inspection.date')
   ->map(function ($events, $date) { 
       return $events
          ->groupBy('site.name')
          ->map(function ($events, $site) use ($date) { 
               return [
                  'title' => $site_name.': '.$events->implode('name', ', '), 
                  'date' => $date
               ];
          }); 
   });