Это может быть очевидно, и я полностью упускаю суть, но у меня есть таблица, которая содержит несколько строк с 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();
Любая помощь будет отличной
@jaysingkar
Ответ исправил это, моя глупая ошибка за то, что упустил это.
в config/database.php
+ Изменить 'strict' => true
к 'strict' => false
конфиг / database.php
Замените «строгий» => true на «строгий» => false
и очистить кеш
Конфигурация php artisan: кеш
тогда проблема будет решена.
Я столкнулся с этой проблемой и решил ее, включив агрегатную функцию в 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, и посмотрите, произошла ли ошибка.