【问题标题】:Laravel SQLSTATE[42000]: Syntax error or access violation: 1055 Expression #2Laravel SQLSTATE[42000]:语法错误或访问冲突:1055 Expression #2
【发布时间】:2017-02-01 03:54:29
【问题描述】:

这可能很明显,我可能完全忽略了这一点,但我有一个包含多行的表,其中包含 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]: Syntax error or access violation: 1055 Expression #2 no无论我们如何尝试篡改查询,它总是会回到这一点。读起来似乎 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();

【问题讨论】:

  • 要禁用 sql_strict 模式,您可以尝试在您的 database.php 中使用 'strict' => false;
  • OH MY GOD,真是个笨蛋,谢谢
  • 这真是他妈的疯了,我浪费了一整天,无论如何感谢stackoverflow.com/users/3687745/jaysingkar

标签: php mysql laravel mysql-error-1055


【解决方案1】:

我遇到了这个问题,并通过在GROUP BY 子句中包含聚合函数来解决它。

我忘了我在哪里看到的,但是聚合函数必须包含在指定的sql_mode only_full_group_by 模式中。

所以,尝试使用 ->groupBy(['lead_distribution.ld_staff','sites'])->groupBy(['lead_distribution.ld_staff','users.name','sites'])

小贴士

尝试转储 laravel 生成的 SQL 查询,将 ->get() 替换为 ->toSql(),然后尝试运行 laravel 生成的查询,看看是否出现错误。

【讨论】:

  • 你的小费救救我
【解决方案2】:

@jaysingkar

Answer 修复了它,我错过了它的愚蠢错误。

config/database.php

'strict' => true更改为'strict' => false

【讨论】:

  • tnx 但strict 是什么?
  • 抱歉暂时没有登录,对于 config/database.php 中的每个数据库配置,您可以添加一个名为“strict”的字段并将其设置为 false
  • 只是为了澄清:mattstauffer.com/blog/…
【解决方案3】:

config/database.php

将'strict' => true 更改为'strict' => false
并清除缓存
php 工匠配置:缓存
那么问题将得到解决。

【讨论】:

    猜你喜欢
    • 2017-07-31
    • 2019-06-06
    • 2018-05-31
    • 2020-06-16
    • 2017-04-01
    • 2023-04-01
    • 1970-01-01
    • 2017-10-29
    • 2015-09-20
    相关资源
    最近更新 更多