不工作分组-Laravel

不工作分组-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

我无法在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 * 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 
    ],