@FimozMozga

Почему не работает sql запрос в Laravel?

В общем у меня есть вот такой запрос
$countries = \DB::table('event_follows')
            ->join('country', 'event_follows.country_id', 'country.id')
            ->select('country.name', \DB::raw('COUNT(event_follows.city_id) as countCities'))
            ->where('event_follows.user_id', $user->id)
            ->groupBy('event_follows.country_id')
            ->get();


И он не работает, выдает ошибку
SQLSTATE[42000]: Syntax error or access violation: 1055 'links.country.name' isn't in GROUP BY


Немного погуглив, нашел вот такое решение. В файл конфигурации database.php в массив mysql я добавил вот такую штуку
'modes' => [
                'STRICT_TRANS_TABLES',
                'NO_ZERO_IN_DATE',
                'NO_ZERO_DATE',
                'ERROR_FOR_DIVISION_BY_ZERO',
                'NO_AUTO_CREATE_USER',
                'NO_ENGINE_SUBSTITUTION'
            ],


И короче все заработало. Вопрос такой, почему sql запрос не работал, пока не внес изменения в конфиг? Впервые с таким сталкиваюсь. Там где взял код, толкового объяснения нет.
  • Вопрос задан
  • 76 просмотров
Решения вопроса 2
iMedved2009
@iMedved2009
Не люблю людей
1. представьте себе таблицу
countries
id, name, continent_id
1, Russia, 1
2, Germany, 1
3, China, 2
4, Kazakhstan, 2

если мы делаем запрос select continent_id from from countries group by continent_id; базе все понятно она выведет
1
2

если мы делаем запрос select name, continent_id from from countries group by continent_id;
базе нихрена не понятно ибо
1, а здесь что выводить? Russia или Germany?
2, а здесь что выводить? China или Kazakhstan?

2. Играться с sql mode дело не правильное - с чего вы решили что на prod сервере вам разрешат это делать?
Ответ написан
Комментировать
ipatiev
@ipatiev
Потомок старинного рода Ипатьевых-Колотитьевых
Этот набор шаманских заклинаний помог потому, что в нем отсутствует элемент ONLY_FULL_GROUP_BY.
Который и отвечает за строгость по отношению к вопросу о группировке.
И по которому гуглится миллион объяснений заодно.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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