2016-09-28 5 views
0

Я все матчи по заказу датой_начал, но я хочу, дата не будет показана всегда вместо разделения команд по дате, как показано ниже:Group By красноречивой 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 
... 

Вместо этого я хочу

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

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

group_by start_date может быть?

ответ

2

Используйте groupBy, чтобы сгруппировать итоговую коллекцию.

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

Если start_date является дата Carbon вы можете попробовать

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

А на ваш взгляд

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

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

$ startDate не дает дату. Также 'foreach ($ match 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 является необязательным и результат должен быть :

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" 
    ] 
] 

Это результат, который вы ищете?

Смежные вопросы