复杂的 Laravel 5 group by on collection

Ped*_*dro 2 php arrays grouping laravel

我有一个集合“事件”,它具有“站点”和“检查”的关系。

我想要做的是将“检查日期”的所有事件分组,然后在该组下按“站点”分组事件。

IE

  • 检验日期 (YYYY-MM-DD)
    • 站点 1
      • 事件名称
      • 事件名称
    • 站点 2
      • 事件名称
  • 检验日期 (YYYY-MM-DD)
    • 站点 1
      • 事件名称

一旦我有了这个分组,我想输出一个数组,如:

[
  'title => 'Site Name: Event Name, Event Name, Event Name', 
  'date' => 'YYYY-MM-DD'
]
Run Code Online (Sandbox Code Playgroud)

这远远超出了我的智力,所以任何帮助将不胜感激!顺便说一句,我正在使用 Postgresql,所以我似乎只能在 ID 上使用 groupBy?

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

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

Jar*_*zyk 5

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

$events = [
   'name' => 'event name',
   'inspection' => ['date' => ' ... '] // relation
   'site' => ['name' => ' ... ']       // relation
Run Code Online (Sandbox Code Playgroud)

这就是你所需要的:

$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
               ];
          }); 
   });
Run Code Online (Sandbox Code Playgroud)