Par*_*ora 25 query-builder laravel laravel-5.3
我无法在Laravel 5.3中运行这个简单的查询
$top_performers = DB::table('pom_votes')
->groupBy('performer_id')
->get();
Run Code Online (Sandbox Code Playgroud)
它给了我:
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`)
Run Code Online (Sandbox Code Playgroud)
但是,如果我从错误中复制原始查询并直接在PhpMyAdmin中触发,它可以正常工作.
我已经检查了这个:
https://laravel.com/docs/5.3/queries#ordering-grouping-limit-and-offset
任何帮助将是appricaited.
谢谢,
Parth Vora
Md.*_*Mia 88
编辑应用程序的数据库配置文件 config/database.php
在mysql
数组中,设置strict => false
为禁用MySQL的严格模式
小智 8
更安全的方法不是禁用 strict ( 'strict' => false
),您可以做的是将数组传递给配置,仅启用您想要的模式:
// config/database.php
'connections' => [
//...
'mysql' => [
//...
'strict' => true,
'modes' => [
//'ONLY_FULL_GROUP_BY', // Disable this to allow grouping by one column
'STRICT_TRANS_TABLES',
'NO_ZERO_IN_DATE',
'NO_ZERO_DATE',
'ERROR_FOR_DIVISION_BY_ZERO',
//'NO_AUTO_CREATE_USER', // This has been deprecated and will throw an error in mysql v8
'NO_ENGINE_SUBSTITUTION',
],
],
],
Run Code Online (Sandbox Code Playgroud)
对于更改该设置后仍然遇到相同错误的任何人,请尝试通过运行清除配置缓存php artisan config:cache
仅获取我们分组所依据的列,在本例中为category_id。
注意:中的列select
必须存在于 中groupBy
,反之亦然。
$posts = Post::query()
->select('category_id')
->groupBy('category_id')
->get();
Run Code Online (Sandbox Code Playgroud)
类别_id |
---|
1 |
2 |
好的,所以您想要获取所有列。那么技巧就是不要在数据库级别使用 groupBy() 。相反,您可以将其与返回的集合一起使用。
$posts = Post::query()
->get()
->groupBy('category_id');
Run Code Online (Sandbox Code Playgroud)
[
'1' => [
['id' => 1, 'name' => 'Post 1', 'category_id' => 1, 'author_id' => 4 'visits' => 32],
['id' => 2, 'name' => 'Post 2', 'category_id' => 1, 'author_id' => 8 'visits' => 12],
],
'2' => [
['id' => 3, 'name' => 'Post 3', 'category_id' => 2, 'author_id' => 12 'visits' => 201],
['id' => 4, 'name' => 'Post 4', 'category_id' => 2, 'author_id' => 4 'visits' => 0],
],
]
Run Code Online (Sandbox Code Playgroud)
false
通过在配置文件中将其设置为 ,可以简单地在 Laravel 中禁用“严格模式” database.php
。虽然可能,但我不建议这样做。最好花时间学习如何编写正确的 SQL 查询,因为关闭“严格模式”给出的结果可能是不可预测的,并会导致出现问题。
https://sinnbeck.dev/posts/laravel-groupby-error
归档时间: |
|
查看次数: |
25901 次 |
最近记录: |