Laravel / Eloquent: создание архива списка сообщений (год, месяц) - PullRequest
0 голосов
/ 08 февраля 2020

Я пытаюсь создать список архива для блога. Я хочу что-то вроде этого:

2020

  • Январь (3)
  • Февраль (2)

2019

  • Январь (10)
  • Февраль (23)

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

$posts_by_date = $blog->hasMany(Post::class)
  ->where('status', 'published')
  ->selectRaw('year(created_at) year, month(created_at) month, count(*) count')
  ->groupBy('year', 'month')
  ->orderByRaw('created_at') desc')
  ->get()
  ->toArray();

Есть ли способ сделать группу вложенной, а не отдельной? Я знаю, что могу изменить результаты после, я просто думаю, что будет чище, если я получу это напрямую из запроса.

1 Ответ

2 голосов
/ 08 февраля 2020

Вы можете использовать Collection::groupBy, чтобы сгруппировать элементы по каждому значению указанного поля, и, таким образом, у вас будет подмассив для каждого года с записями, относящимися к этому году.
Вам просто нужно сначала collect() что вы получаете для создания Коллекции, а затем вызываете ->groupBy('year').

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...