GroupBy与今天的日期排在最前面

时间:2018-04-18 15:57:45

标签: laravel

我有一个按开始日期分组的事件列表(下面工作正常)。

$events = Event::select('*')->orderBy('start_date', 'desc')->get()->groupBy(function($date) {
    return Carbon::parse($date->start_date)->format('dS F Y');
});

//current output
19/04/2018
    Event 1
    Event 2
18/04/2018
    Event 3
    Event 4
16/04/2018
    Event 5
    Event 6

我想要的是,将今天所有活动展示在列表之上(如下所示)。

//desired output
18/04/2018
    Event 3
    Event 4
19/04/2018
    Event 1
    Event 2
16/04/2018
    Event 5
    Event 6

会感激一些帮助。提前谢谢。

2 个答案:

答案 0 :(得分:1)

使用此:

$today = Carbon::today()->format('dS F Y');
if($events->has($today)) {
    $events->prepend($events->pull($today), $today);
}

答案 1 :(得分:0)

这有点粗糙,更多的是一个想法:-)。我不知道你的数据是如何构建的,也没有真正测试过这个等等,但你可以用收藏品来做这件事,我假设日期是关键,如果你不能做$item->date

首先创建一个包含所有今天不是日期的事件的集合

$eventsExcludingToday = $events->filter(function ($item, $key) {
        return $key !== Carbon::now()->format('d/m/Y');
 });

第二次获得今天的日期

$eventToday = $events->filter(function ($item, $key) {
        return $key === Carbon::now()->format('d/m/Y');
 })->first();

3rd将日期放在我们首先创建的集合的开头

$events = $eventsExcludingToday->prepend($eventToday);