Доступ к курсу "Query Builder" закрыт

Автор: Vasiliy Bulykin 06/10/2022 09:10:00

А как вы это сделали? :)

В запросе происходит получение нескольких полей, а группировка по одному. Что логично — SQL говорит, что "An exception occurred while executing a query: SQLSTATE[42000]: Syntax error or access violation: 1055 Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'symfony_sqlbuilder.t0_.id' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by"

и лечить получается добавлением -->select('t.name')
но тогда и результат будет только по именам.

какие настройки в проекте нужно поменять, чтобы это заработало на "select *" ?

Автор: Дмитрий Ченгаев 08/10/2022 09:10:52

Не понял совсем вопроса.

Если нужен SQL запрос, вполне можно использовать примерно так
SELECT * FROM `user` GROUP BY roles;

Автор: Vasiliy Bulykin 08/10/2022 10:10:46

В смысле - я делаю всё, как в видео - а симфони говорит "An exception occurred while executing a query: SQLSTATE[42000]: Syntax error or access violation: 1055 Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'symfony_sqlbuilder.t0_.id' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by"

Автор: Дмитрий Ченгаев 08/10/2022 10:10:24

Проверил еще раз. Все работает. Нужно разбираться уже на конкретном примере.

Попробуйте закомментировать getResult и посмотреть какой запрос формируется.

Вот так
return $this->createQueryBuilder('u')
->addGroupBy('u.roles')
->getQuery();
//->getResult();

Судя по ошибке идет попытка сделать Group by по колонке id. Эта колонка не аггрегируемая и по ней нельзя сделать group by, т.к. все ее значения по определению уникальны.

Поэтому нужно указать какую-то другую колонку. Например, я указал u.roles - колонка roles в таблице tables.

dql запрос получился

SELECT u FROM App\Entity\User u GROUP BY u.roles

Посмотрите какой запрос будет у вас.

Автор: Vasiliy Bulykin 08/10/2022 12:10:20

даже в phpMyAdmin запрос "SELECT * FROM `test` GROUP BY name" ожидаемо даёт ответ "#1055 - Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'symfony_sqlbuilder.test.id' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by"

"sql_mode=only_full_group_by" — это какая-то настройка самого мускула? ежель да, то где искать?

Автор: Дмитрий Ченгаев 08/10/2022 02:10:15

Да. Похоже нужно отключить этот режим.

Не сталкивался с этим раньше.

Вот, вроде бы есть рекомендации, как это сделать
https://stackoverflow.com/questions/23921117/disable-only-full-group-by

Автор: Vasiliy Bulykin 08/10/2022 02:10:49

Я, конечно, давно SQL учил. Но помню, что, как минимум по умолчанию, при использовании group by, в этом самом групп бай должны быть все поля, которые упоминаются в селекте

Автор: Vasiliy Bulykin 08/10/2022 03:10:03

способ поправить настройки рабочие. спасибо :)