2016-08-25 7 views
1

私は、 'Site'の関係を持つコレクション 'Event'を持っています。& 'Inspection'複合Laravel 5グループbyコレクション

私がしたいことは、「Inspection Date」にすべてのイベントをグループ化し、次にこのグループの下で「Site」でイベントをグループ化することです。

すなわち

  • 点検日(YYYY-MM-DD)
    • サイト1
      • イベント名
      • イベント名
    • サイト2
      • イベント名
  • 点検日(YYYY-MM-DD)
    • サイト1
      • イベント名

そして、私はこのグループ分けをしたら、私が出力するような配列たい:

[ 
    'title => 'Site Name: Event Name, Event Name, Event Name', 
    'date' => 'YYYY-MM-DD' 
] 

これはよく私の知性を超えているので、任意の助けが理解されるであろう!私はPostgresqlを使用しているので、私はidの上でのみgroupByを使用することができますか?

が、私はちょっとどこかではなく、続行するかどうかは確かに私を得ているようだGROUPBY()およびマップ()を使用して、いくつかのことを試みてきた:

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

答えて

1

構造を仮定し(配列のように簡略化):

$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 
       ]; 
      }); 
    }); 
+0

感謝。 'array_key_exists():最初の引数は文字列または整数でなければなりません。 ' PostgreSQLと何か関係がありますか? – Pedro

+0

いいえ、実際にはオブジェクトであるキーを渡す可能性があります。コードを貼り付けます –

+0

( 'inspection.name')や( 'inspection.id')のようなものでgroupByを使用できますが、inspection.dateでは使用できないため、問題が発生する日付は間違いありません。グループ内の文字列閉じるクロージャ? – Pedro

関連する問題