Главная/Статьи/Laravel: группировка записей по месяцам
Laravel

Laravel: группировка записей по месяцам

Введение

При разработке сайта с расписанием семинаров возникла задача вывода плиток, сгруппированных по месяцам. Делюсь своим решением этой задачи.

Подготовка

Для начала необходимо подключить модель и класс Carbon в контроллер:

use App\\Event;
use Carbon\\Carbon;

Важное замечание: даты в базе должны храниться в формате year-month-day, чтобы правильно извлекать месяц для группировки.

Реализация в контроллере

В методе контроллера, отвечающем за вывод событий, используется следующая конструкция. Код сортирует записи по дате и группирует их по месяцу, используя Carbon для парсинга даты и извлечения месячного значения:

public function events(){
  $events = Event::orderBy('date_start')
    ->get()
    ->groupBy(function($events) {
      return Carbon::parse($events->date_start)->format('m');
    });
  return view('events')->with('events', $events);
}

Вывод в представлении

Блейд-шаблон создаёт многомерный цикл, где внешний цикл проходит по месяцам, а внутренний выводит события каждого месяца. Bootstrap классы обеспечивают сеточную верстку:

@foreach($events as $key => $value)

{{$key}}

@foreach($value as $event)

{{$event->title}}

@endforeach
@endforeach