分组由雄辩的laravel

时间:2016-09-28 05:33:58

标签: sql laravel eloquent

我的所有比赛都是由start_date排序的,但是我希望日期不会显示,而是将日期分开,如下所示:

$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 个答案:

答案 0 :(得分:2)

使用groupBy对生成的集合进行分组。

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

如果start_date是碳日期,您可以尝试

$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

答案 1 :(得分: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"
    ]
]

这是你寻求的结果吗?