Как выбрать все месяцы разных годов по одному разу в Laravel?
Для списка архива на блоге нужно выбрать все месяцы по одному разу, в которых есть хотя бы одна запись. Дату в БД храню в поле published_at типа timestamp()
Запрос Post::select('published_at')->distinct()->get();
извлекает полностью разные даты (дата и время публикации) по одному разу, а мне же нужно разные месяцы.
Думаю что можно увидеть решение задачи в одном запросе... но я как то не могу догадаться. Заранее спс за помощь.
Post::select(DB::raw("MONTH(published_at) as month, YEAR(published_at) as year"))->groupBy(DB::raw("MONTH(published_at), YEAR(published_at)"))->distinct()->get();
Да, так я понял как использовать Ваш код. Только еще добавил сортировку по годам по убыванию: select(DB::raw("MONTH(published_at) as month, YEAR(published_at) as year"))->groupBy(DB::raw("MONTH(published_at), YEAR(published_at)"))->distinct()->orderBy(DB::raw("YEAR(published_at)"), 'desc')->get();
Не знаю верно ли, но работает!
Нехорошо когда использую чужой код, и не понимаю как оно работает(
DB::raw лишь добавляет к запросу чистый SQL код.
MONTH, YEAR, DAY - функции MySQL которые конвертируют timestamp в месяц, год либо день соответственно.