2016-09-28 31 views
0

ことで、私はSTART_DATEが注文したすべての一致を持っていますが、私は日付が以下のように日付でチームを分ける代わりに常に表示されないようにしたい:グループ雄弁laravel

$matches=Match::orderBy('start_date','desc')->get(); 
foreach($matches as $match) 
{ 
     $match->team1; 
     $match->team2; 
     $match->start_date; 
} 

これは与える:

Team1 
Team2 
2016-9-28 
Team3 
Team4 
2016-9-28 
Team5 
Team6 
2016-9-28 
... 

代わりに、私はGROUP_BYのSTART_DATEがかもしれ

2016-9-28 
Team1 
Team2 
Team3 
Team4 
Team5 
Team6 
.... 

2016-9-29 
Team1 
Team2 
Team3 
.... 

をしたいですか?

答えて

2

groupByを使用して、結果のコレクションをグループ化します。

$matchGroups = Match::orderBy('start_date','desc')->get()->groupBy('start_date'); 

start_dateはあなたが

@foreach ($matchGroups as $startDate => $matches) { 
    {{ $startDate }} 

    @foreach ($matches as $match) { 
     {{ $match->team1 }} 
     {{ $match->team2 }} 
    @endforeach 
@endforeach 
+0

$ startDateさんは日付を付けていません。また、 'foreach($ matches as $ match)'はエラーを返します。 – Steve

+0

@Steveは更新された回答を参照してください。 'groupBy'は' get'の後に来るべきです – chanafdo

1

がうーん..あなたが

$matches = Match::select(DB::raw('GROUP_CONCAT(team) AS teammate'), 'start_date') 
      ->groupBy('start_date'); 
      ->get() 
      ->toArray(); 

のtoArrayを試すことができます

$matchGroups = Match::orderBy('start_date','desc')->get()->groupBy(function($item) { 
    return $item->start_date->format('Y-n-j'); 
}); 

を試してみて、あなたのビューでも炭素日付がある場合はオプションです結果は次のようになります。 :

array:2 [ 
    0 => array:2 [ 
     "start_date" => "2016-9-28" 
     "teammate" => "Team1,Team2, Team3, Team4, Team5, Team6" 
    ] 
    1 => array:2 [ 
     "start_date" => "2016-9-29" 
     "teammate" => "Team1,Team2, Team3" 
    ] 
] 

これはあなたが求めている結果ですか?