这可能是显而易见的,我完全忽略了这一点,但我有一个表包含多行user_id,site_id,例如。
ldstaff | ld_site
____________________
3 1
3 2
4 1
一个最初由旧开发人员编写的mysql查询得到了工作人员ID找到他们的名字,然后将所有网站连在一起制作这样的东西。
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();
任何帮助都会很棒
答案 0 :(得分:6)
@jaysingkar
答案修好了,我错过了它的愚蠢错误。
config/database.php
中的
将'strict' => true
更改为'strict' => false
答案 1 :(得分:2)
配置/ database.php中
更改'严格' =>真的要严格要求' =>假
并清除缓存
php artisan config:cache
然后问题将得到解决。
答案 2 :(得分:1)
我遇到了这个问题,并通过在return true
子句中包含聚合函数来解决它。
我忘记了我在哪里读到这个,但聚合函数必须包含在指定的GROUP BY
模式中。
所以,试试吧
sql_mode only_full_group_by
或->groupBy(['lead_distribution.ld_staff','sites'])
一个方便的提示
尝试通过将
->groupBy(['lead_distribution.ld_staff','users.name','sites'])
替换为->get()
来转储由laravel生成的SQL查询,然后尝试运行laravel生成的查询并查看是否发生错误。