Я пробовал несколькими способами, но это не работает (похоже, игнорирует). Итак, что я пробовал:
$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, чтобы легко добиться этого с помощью одной строки, почему тяжелая работа ..
Кто-нибудь знает, почему не работает?
Я сделаю это в следующий раз, когда столкнусь с этой проблемой. На данный момент поборол это с помощью collection->each(). Буду обновлять здесь
Если вы используете Blade, вы можете видеть запросы для данного маршрута с помощью barryvdh / laravel-debugbar.
Не могли бы вы показать схему таблицы заметок? А какая у вас база драйвера и версия?
Можете ли вы показать результат dd(Note::where('user_id', $user->id)->groupBy('title')->toSql());
Попробуйте с помощью оператора SELECT это должно быть так: DB :: table ('notes') -> select ('title', 'Other_field') -> where ('us er_id', $ user-> id) -> groupBy ('название') -> получить ()






вам просто нужно сначала вызвать -> 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() выполняет запрос, поэтому я думаю, что его нужно вызывать в последнюю очередь. Вот как вы его найдете в документация.
Я пробовал несколько минут назад и работал (с laravel 5.3)
Я думаю, вы могли звонить Метод groupBy () коллекции.
Я должен подтвердить, что я заставил его работать с методом Collection groupBy(), но не с построителем запросов
перейдите с помощью select () и добавьте свою группу по полю в select
e.g DB::table('notes')->select('title','Other_field')->where('user_id', $user->id)->groupBy('title')->get();
Я предлагаю вам отладить запрос (поиск «Прослушивание событий запроса»).