【问题标题】:Getting an error when trying to groupBy in laravel在 laravel 中尝试 groupBy 时出错
【发布时间】:2021-02-04 04:16:43
【问题描述】:

我正在尝试创建一个页面,该页面将显示已批准帖子的数量并按 created_at 列对其进行分组。

当我使用我编写的代码时,我得到了这个错误

错误异常 SQLSTATE [42000]:语法错误或访问冲突:1055 SELECT 列表的表达式 #1 不在 GROUP BY 子句中,并且包含在功能上不依赖于 GROUP BY 子句中的列的非聚合列“blog.posts.id”;这与 sql_mode=only_full_group_by 不兼容(SQL:select * from posts where status = approved group by created_at)(查看:/home/workspace/Documents/projects/blog/Modules/Posts/Resources/views/ index.blade.php)

这是我的代码

$approved = Post::where('status', 'approved')->groupBy('created_at')->get();

dd($approved);

【问题讨论】:

标签: laravel laravel-8


【解决方案1】:

当使用groupby 子句时,请始终在选择语句中添加您作为分组依据的列名 例如:

$approved = Post::select('created_at')
                  ->where('status', 'approved')
                  ->groupBy('created_at')->get();

dd($approved);

【讨论】:

  • 如果我这样做,那么我只会得到created_at,我想得到所有的列,而不仅仅是created_at
  • @Nienna 然后在选择语句中添加所有列名,如果你需要它是必须的
  • 我就是这么想的,所以我输入了Post::select('id', 'status,' 'created_at'),但后来我得到了与我的问题相同的错误,尽管这次它有'blog.posts.status而不是'blog.posts.id
【解决方案2】:
$data = DB::table('posts')
                ->groupBy('created_at')
                ->having('status','approved')
                ->get();

只要根据你的情况改变位置

【讨论】:

    猜你喜欢
    • 2021-09-07
    • 1970-01-01
    • 1970-01-01
    • 2020-12-04
    • 2021-01-27
    • 1970-01-01
    • 2022-10-03
    • 2016-08-09
    • 1970-01-01
    相关资源
    最近更新 更多