@IliaMal

Почему не получается выбрать уникальные поля по методу groupBy в Laravel?

Пытаюсь получить записи из бд без дублей.
Выполняю запрос
$data= new App\Client();
$client = $data->distinct()->groupBy('email')->get();


Сталкиваюсь с ошибкой:
SQLSTATE[42000]: Syntax error or access violation: 1055 'invest.clients.id' isn't in GROUP BY (SQL: select distinct * from `clients` group by `email`)

Но если скопипастить запрос из этой ошибки select distinct * from `clients` group by `email` и выполнить ег она прямую в БД, то он прекрасно отрабатывает.

В чем тогда проблема?
  • Вопрос задан
  • 82 просмотра
Решения вопроса 1
alexey-m-ukolov
@alexey-m-ukolov Куратор тега MySQL
Ошибка совершенно верная: выбирать в запросе нужно только те колонки, которые указаны в группировке, иначе результат будет непредсказуемым. Ну а distinct тут и вовсе не нужен:
$emails = $data->groupBy('email')->pluck('email');

Через БД же он отрабатывает потому, что в Laravel включен strict-режим (и это хорошо).

Но то, что у вас переменная называется $client, наводит на мысли о том, что вы и вовсе желаете чего-то странного. Получить записи без дублей одним запросом вряд ли получится, потому что там нужно очень чётко указывать, какой результат вы хотите получить и запрос будет громоздким, если его вообще удастся составить. Такую задачу намного проще решить кодом, хоть это и не так эффективно по ресурсам. Если это разовая задача, то делать её однозначно стоит через PHP, если же постоянная - нужно думать над схемой БД и необходимыми данными.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы