Введение
При разработке сайта с расписанием семинаров возникла задача вывода плиток, сгруппированных по месяцам. Делюсь своим решением этой задачи.
Подготовка
Для начала необходимо подключить модель и класс 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)@endforeach{{$key}}
@foreach($value as $event)@endforeach{{$event->title}}