Кажется, из-за изменения в MySQL 5.7 или выше, режим SQL ONLY_FULL_GROUP_BY включен по умолчанию, так что старый добрый код, который я имел, который выглядел так:Как получить все отдельные строки на основе определенного столбца?
Table::where('name', 'LIKE', '%'.$search_str.'%')
->groupBy('name')
->get();
Теперь бросает ошибку ...
SQLSTATE[42000]: Syntax error or access violation: 1055 Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column
Я пробовал обновлять свой код различными способами, чтобы попытаться заставить его работать, но не повезло.
Это то, что я в настоящее время:
Table::where('name', 'LIKE', '%'.$search_str.'%')
->selectRaw('name, ANY_VALUE(id), ANY_VALUE(col_a), ANY_VALUE(col_b), ANY_VALUE(col_c), ANY_VALUE(col_d)')
->groupBy('name')
->get();
Это не бросает какие-либо ошибки, но данные столбца отсутствует.
Я также попытался:
Table::where('name', 'LIKE', '%'.$search_str.'%')
->groupBy('name')
->groupBy('id')
->get();
Который не возвращает отдельные строки на основе «имя». Он просто возвращает все.
Как это сделать в Laravel Красноречивый или необработанный MySQL?
Вы пробовали '-> distinct() -> get();' – EddyTheDove
Я тоже посмотрел в distinct(). Однако он возвращает только одну строку. Я пытаюсь получить несколько строк. – rotaercz