Laravel по-русски

Русское сообщество разработки на PHP-фреймворке Laravel.

Ты не вошёл. Вход тут.

#1 07.06.2018 00:56:29

Вопрос. groupBy через отношения

Возможно всё элементарно, но мне нужна помощь.
В чём вопрос. Есть, например, автор книг, категории и сами книги.
Естественно, книги относятся к категориям и к авторам.
Необходимо вытащить все книги всех авторов из определённой категории с группировкой по авторам, а в дальнейшем по дням.
Например:

Автор: John Doe
02.01.2018
 -Книга №1
 -Книга №2
 -Книга №3
 -Книга №4
01.01.2018
 -Книга №1
 -Книга №2
 -Книга №3
 -Книга №4

Автор: Jane Doe
02.01.2018
 -Книга №1
 -Книга №2
 -Книга №3
 -Книга №4
01.01.2018
 -Книга №1
 -Книга №2
 -Книга №3
 -Книга №4

Заранее благодарен за помощь.

Изменено Echo (07.06.2018 00:56:47)

Не в сети

#2 07.06.2018 01:43:53

AlexForever
Откуда: Кишинев
Сообщений: 31

Re: Вопрос. groupBy через отношения

Начиная с версии 5.5 у ларавела можно осуществлять множественную группировку
https://laravel.com/docs/5.5/collections#method-groupby

Изменено AlexForever (07.06.2018 01:44:12)

Не в сети

#3 07.06.2018 03:05:45

Re: Вопрос. groupBy через отношения

Начиная с версии 5.5 у ларавела можно осуществлять множественную группировку

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

Не в сети

#4 07.06.2018 04:38:02

Re: Вопрос. groupBy через отношения

Прошу прощения, уже нашёл решение.
Спасибо за помощь.

Изменено Echo (07.06.2018 05:03:39)

Не в сети

#5 07.06.2018 06:40:13

Re: Вопрос. groupBy через отношения

Во-первых, надо смириться с тем, что буквально такой результат недостижим с помощью Query Builder. Потому что SQL-ный group by выдаёт толко группируемые поля и агрегаты, а здесь присутствуют группы, включающие в себя списки другого вида.

Но если мы будем применять groupBy уже после получения данных из базы, группировать коллекции, то есть
…->get()->groupBy(…)
а не наоброт, то такой вид возможен.


There are two hard things in computer science: cache invalidation, naming things, and off-by-one errors.

Не в сети

#6 07.06.2018 07:20:43

Re: Вопрос. groupBy через отношения

Многомерные groupBy работают для коллекций начиная с v5.5
Тем кто использует более старые версии, может пригодиться изучение соответствующего, PR который вошел в v5.5.
https://github.com/laravel/framework/pull/22630
всего один коммит, помоему блестящее дополнение.


There are two hard things in computer science: cache invalidation, naming things, and off-by-one errors.

Не в сети

Подвал раздела