我无法在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
答案 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'";
}
用此替换功能。