Larval SQLSTATE [42000]:语法错误或访问冲突:1055表达式#2

时间:2016-09-23 10:12:02

标签: php mysql laravel mysql-error-1055

这可能是显而易见的,我完全忽略了这一点,但我有一个表包含多行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();

任何帮助都会很棒

3 个答案:

答案 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生成的查询并查看是否发生错误。