Laravel: группировка записей по месяцам
Разрабатывая на одном из сайтов расписание семинаров столкнулся с вопросом вывода "плиток" семинаров сгруппированных по месяцу. Следуя золотому правилу - искал что то в гугле - пиши заметку, публикую здесь моё решение.

Для начала в нашем контроллере подключаем модель в которой у меня хранятся события, а так же класс Carbon для манипуляций с датами.
use App\Event; use Carbon\Carbon;
Примечание: даты в базе должны хранится в корректном формате, а именно year-month-day для того, что бы мы могли получить необходимый нам месяц в качестве аргумента для группировки.
В методе контроллера который у меня отвечает за вывод событий пишем вот такую конструкцию:
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);
}
Как вы видите мы получили данные из модели Event отсортировали все записи по дате, и описали небольшую функцию группировки, где при помощи класса Carbon получили месяц из даты вида 2017-02-01 в качестве аргумента для группировки записей. Теперь в переменной $events у нас получился многомерный массив, где в качестве ключа выступает месяц.
Осталось лишь вывести всю эту красоту в представлении:
<div class="row">
@foreach($events as $key => $value)
<div class="col-sm-3">
<h3>{{$key}}</h3>
@foreach($value as $event)
<div class="event-item">
<p>{{$event->title}}</p>
</div>
@endforeach
</div>
@endforeach
</div>
Как вы наверное уже догадались по классам разметки, за стилизацию у меня отвечает bootstrap который расскладывает месяца как ячейки в сетке, а записи как блоки внутри этих ячеек.