Larval SQLSTATE [42000]: синтаксическая ошибка или нарушение доступа: 1055 выражение № 2

Это может быть очевидно, и я полностью упускаю суть, но у меня есть таблица, которая содержит несколько строк с user_id, site_id, например.

ldstaff | ld_site
____________________
3         1
3         2
4         1

Запрос mysql, изначально написанный старым разработчиком, позволил идентификатору персонала найти свое имя и затем объединить все сайты вместе, чтобы сделать что-то подобное.

StaffID | Name | sites
3       Dave    1,2

Этот запрос был изначально написан как

SELECT `ld_staff` as staffID ,a.name,GROUP_CONCAT(`ld_site`) as sites FROM `lead_distribution` l

LEFT JOIN users a ON a.crm_id = l.ld_staff

WHERE ld_enabled = 1 AND

`account_type` = 1 AND `active` = 1 AND `no_more` = 0 AND network_team > 0 AND renewal_team = 0

GROUP BY `ld_staff`

Однако, когда мы пытаемся написать это в Laravel как часть новой системы, чтобы получить те же результаты, мы получаем ошибку SQLSTATE [42000]: синтаксическая ошибка или нарушение прав доступа: 1055 выражение № 2 Независимо от того, как мы пытаемся изменить запрос, он всегда возвращается к этому. Читая, кажется, что sql_mode only_full_group_by не разрешает этот тип запроса, поэтому я изменил sql_mode на = «», и эта ошибка все еще сохраняется.

Личинка запроса

$data = DB::table('lead_distribution')
->join('users','ld_staff','=','users.crm_id')
->select("lead_distribution.ld_staff",'users.name',DB::raw("GROUP_CONCAT(`ld_site`) as sites"))
->where('users.account_type', '=', 1)
->where('users.active', '=', 1)
->where('users.no_more', '=', 0)
->where('users.network_team', '>', 0)
->where('users.renewal_team', '=', 0)
->groupBy('lead_distribution.ld_staff')
->get();

Любая помощь будет отличной

4

Решение

@jaysingkar

Ответ исправил это, моя глупая ошибка за то, что упустил это.

в config/database.php

+ Изменить 'strict' => true к 'strict' => false

6

Другие решения

конфиг / database.php

Замените «строгий» => true на «строгий» => false
и очистить кеш
Конфигурация php artisan: кеш
тогда проблема будет решена.

2

Я столкнулся с этой проблемой и решил ее, включив агрегатную функцию в GROUP BY пункт.

Я забыл, где я читал это, но агрегатные функции должны быть включены в указанный sql_mode only_full_group_by Режим.

Итак, попробуйте использовать
->groupBy(['lead_distribution.ld_staff','sites']) или же ->groupBy(['lead_distribution.ld_staff','users.name','sites'])

Удобный совет

Попробуйте сбросить SQL-запрос, созданный laravel, заменив ->get() с ->toSql() затем попробуйте выполнить запрос, созданный laravel, и посмотрите, произошла ли ошибка.

1
По вопросам рекламы [email protected]