不工作分组-Laravel
我无法在Laravel5.3中运行这个简单的查询不工作分组-Laravel,laravel,laravel-5.3,query-builder,Laravel,Laravel 5.3,Query Builder,我无法在Laravel5.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
$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中激发,它就可以正常工作
我已经检查过了:
任何帮助都将被告知
谢谢
Parth Vora编辑应用程序的数据库配置文件
config/database.php
在
mysql
数组中,设置strict=>false
以禁用mysql的严格模式可能是因为您使用的是5.7.5+版本的mysql服务器。从这个版本开始,groupby
的工作方式发生了变化,因为它们使其行为符合SQL99(在以前的版本中不是这样)
尝试进行完整分组或更改MySQL服务器的配置
到官方MySQL文档,其中解释了完整的
GROUP BY如果您使用了错误的严格模式,那么您无法使用其他严格功能来修复此错误,请转到照明\数据库\连接器\ 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'";
}
用此函数替换函数。编辑应用程序的数据库配置文件config/database.php
在mysql数组中,设置strict=>false以禁用mysql的strict mod
或
sudo nano/etc/mysql/mysql.cnf
[mysqld]
sql模式=日期中无0,日期为0,错误为0除以0,无自动创建用户,无引擎替换
转到config/database.php
更新严格值false
将database.php文件从config/database.php'strict'=>true
修改为'strict'=>false
'mysql' => [
'strict' => true
],
您的数据库中有一些“错误”。正如您在错误中所看到的,MySQL需要一个字段assessment\u system.pom\u voted.id
,但它不在那里。非常感谢。这正是问题所在。如果在Laravel doc的某个地方提到,那就太好了。谢谢你的回答。干得好。你能解释一下“strict”参数在mysql配置中的作用吗?你能详细解释一下为什么这可以解决这个问题吗?禁用strict模式不是一个好的解决方案。请参阅@GabrieleCiechI的以下答案。我希望这个答案能及时获得更多选票,因为它应该被视为正确答案,了解事情为什么会发生以及应该如何处理很重要。110%的建议;)这是两年前的报道。
'mysql' => [
'strict' => true
],