Laravel 5.6 - GroupBy не работает

Я пробовал несколькими способами, но это не работает (похоже, игнорирует). Итак, что я пробовал:

$user->notes()->groupBy('title')->get();

Вышеупомянутый способ полностью игнорирует groupBy и просто возвращает коллекцию заметок.

Note::where('user_id', $user->id)->groupBy('title')->get();

Точно такой же результат и с этим.


В моем database.php база данных установлена ​​на 'strict' => false


Я также пробовал использовать необработанный запрос к базе данных, он возвращает его в странном формате (возвращает 1 строку для каждого заголовка, когда я использую groupBy)

DB::table('notes')->where('user_id', $user->id)->groupBy('title')->get();

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

Я могу добиться того, что хочу, с помощью collection->each(function ($note) {...} ), однако, хотя есть groupBy, чтобы легко добиться этого с помощью одной строки, почему тяжелая работа ..

Кто-нибудь знает, почему не работает?

Я предлагаю вам отладить запрос (поиск «Прослушивание событий запроса»).

Camilo 04.07.2018 03:32

Я сделаю это в следующий раз, когда столкнусь с этой проблемой. На данный момент поборол это с помощью collection->each(). Буду обновлять здесь

senty 04.07.2018 04:08

Если вы используете Blade, вы можете видеть запросы для данного маршрута с помощью barryvdh / laravel-debugbar.

Camilo 04.07.2018 06:17

Не могли бы вы показать схему таблицы заметок? А какая у вас база драйвера и версия?

Adre Astrian 04.07.2018 06:44

Можете ли вы показать результат dd(Note::where('user_id', $user->id)->groupBy('title')->toSql());

Davit 04.07.2018 06:45

Попробуйте с помощью оператора SELECT это должно быть так: DB :: table ('notes') -> select ('title', 'Other_field') -> where ('us‌ er_id', $ user-> id) -> groupBy ('название') -> получить ()

Riajul Islam 04.07.2018 09:01
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
В предыдущем посте мы создали функциональность вставки и чтения для нашей динамической СУБД. В этом посте мы собираемся реализовать функции обновления...
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
Роли и разрешения пользователей без пакета Laravel 9
Роли и разрешения пользователей без пакета Laravel 9
Этот пост изначально был опубликован на techsolutionstuff.com .
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
1
6
2 227
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

вам просто нужно сначала вызвать -> get (), затем -> groupBy (). Это потому, что в SQL-запросе вам нужно сначала выбрать элементы, а затем сгруппировать.

Итак, ваш код должен быть таким:

DB::table('notes')->where('user_id', $user->id)->get()->groupBy('title');

Вот пример группового запроса:

SELECT column_name(s)
FROM table_name
WHERE condition
GROUP BY column_name(s)
ORDER BY column_name(s);

Я не так уверен в этом. Метод get() выполняет запрос, поэтому я думаю, что его нужно вызывать в последнюю очередь. Вот как вы его найдете в документация.

Camilo 04.07.2018 03:24

Я пробовал несколько минут назад и работал (с laravel 5.3)

PailletJP 04.07.2018 03:26

Я думаю, вы могли звонить Метод groupBy () коллекции.

Camilo 04.07.2018 03:36

Я должен подтвердить, что я заставил его работать с методом Collection groupBy(), но не с построителем запросов

senty 05.07.2018 16:34

перейдите с помощью select () и добавьте свою группу по полю в select

   e.g DB::table('notes')->select('title','Other_field')->where('user_id', $user->id)->groupBy('title')->get();

Другие вопросы по теме