我无法在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
任何帮助都将受到欢迎。
谢谢你,
帕斯沃拉
9条答案
按热度按时间y1aodyip1#
编辑应用程序的数据库配置文件
config/database.php
在
mysql
数组中,设置strict => false
以禁用MySQL的严格模式up9lanfz2#
也许您的问题是由于您使用的是MySQL服务器版本5.7.5+。从这个版本的
GROUP BY
的工作方式发生了变化,因为他们使它的行为,以SQL99兼容(而在以前的版本,它不是)。尝试通过或更改MySQL服务器的配置进行完整分组。
Link到正式MySQL文档,其中解释了完整的
GROUP BY
kr98yfug3#
更安全的方法不是禁用strict(
'strict' => false
),而是向config传递一个数组,只启用您想要的模式:如果更改设置后仍然出现相同的错误,请尝试运行
php artisan config:cache
来清除配置缓存wqsoz72f4#
xkrw2x1b5#
您可以在查询之前定义这一行,假设您要使用groupBy,因此无需将config strict更改为false,只需在使用groupBy的位置之前添加这一行:
jbose2ul6#
我的公司使用原始SQL来运行group by,而不必冒险更改mysql设置。
下面是一个工作示例:
问我任何关于这个代码,如果你不明白,我会尽快回复我可以。干杯。
2hh7jdfx7#
有很多方法可以解决这个问题
第一
只获取分组所依据的列,在本例中为category_id。
select
中的列必须存在于groupBy
中,反之亦然。| 类别标识|
| - ------|
| 1个|
| 第二章|
2
但我想要所有列!
好的,如果你想得到所有的列,那么诀窍就是不要在数据库级别使用groupBy(),而可以在返回的集合中使用它。
x一个一个一个一个x一个一个二个x
3
在Laravel中,可以通过在
database.php
配置文件中将其设置为false
来简单地禁用"严格模式"。虽然可能,但我不建议这样做。最好花时间学习如何编写正确的SQL查询,因为关闭"严格模式"所给出的结果可能是不可预测的,并导致未来的问题。参考
https://sinnbeck.dev/posts/laravel-groupby-error
hsvhsicv8#
编辑应用程序的数据库配置文件config/database.php
在mysql数组中,设置strict =〉false禁用MySQL的strict mod
或
浏览器/etc/mysql/mysql.cnf
[mysqld] sql_mode =无零输入日期、无零日期、按零划分错误、无自动创建用户、无引擎替换
goucqfw69#
如果您设置为false strict mode,则无法使用其他strict函数来修复此错误请转到Illuminate\Database\Connectors\MySqlConnector.php并按如下所示更改函数:
用这个替换函数。