小组不工作 - Laravel

时间:2017-01-10 14:30:57

标签: laravel laravel-5.3 query-builder

我无法在Laravel 5.3中运行这个简单的查询

$top_performers = DB::table('pom_votes')
        ->groupBy('performer_id')
        ->get();

它给了我:

SQLSTATE[42000]: Syntax error or access violation: 1055 'assessment_system.pom_votes.id' isn't in GROUP BY (SQL: select * from `pom_votes` group by `performer_id`)

但是,如果我从错误中复制原始查询并直接在PhpMyAdmin中触发,它可以正常工作。

我已经检查了这个:

https://laravel.com/docs/5.3/queries#ordering-grouping-limit-and-offset

任何帮助都是适当的。

谢谢,

Parth Vora

6 个答案:

答案 0 :(得分:71)

编辑应用程序的数据库配置文件config/database.php

mysql数组中,设置strict => false以禁用MySQL的严格模式

答案 1 :(得分:15)

也许您的问题是由于您使用的是MySQL服务器版本5.7.5+。从这个版本开始,GROUP BY的工作方式发生了变化,因为它们的行为是为了符合SQL99(在之前的版本中并非如此)。

尝试通过更改整个组或更改MySQL服务器的配置。

Link到官方MySQL文档,其中解释了完整GROUP BY

答案 2 :(得分:0)

将您的database.php文件从config / database.php 'strict' => true修改为'strict' => false

    'mysql' => [ 
        'strict' => true 
    ],

答案 3 :(得分:-1)

编辑应用程序的数据库配置文件config / database.php

在mysql数组中,设置strict => false可禁用MySQL的严格mod

sudo nano /etc/mysql/mysql.cnf

[mysqld] sql_mode = NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

答案 4 :(得分:-1)

  

转到config / database.php

将严格值更新为false。

return [
   'connections' => [
      'mysql' => [
         'strict' => false
       ]
   ]
]

答案 5 :(得分:-3)

如果您使用false严格模式,则无法使用其他严格功能来修复此错误转到 Illuminate \ Database \ Connectors \ MySqlConnector.php 并更改功能如下所示:

protected function strictMode() {
return "set session
sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY
_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'";
}

用此替换功能。