Laravel groupBy 不能与 PostgreSQL 一起正常工作

Posted

技术标签:

【中文标题】Laravel groupBy 不能与 PostgreSQL 一起正常工作【英文标题】:Laravel groupBy doesn't work properly with PostgreSQL 【发布时间】:2018-04-05 04:17:54 【问题描述】:

没有groupBy 的行数相同。

$authors = AuthorMask::where('company_id', $user->company_id)
        ->groupBy('id', 'author_id')
        ->orderBy('created_at', 'desc')
        ->paginate(5);

如果我使用这个:

$authors = AuthorMask::where('company_id', $user->company_id)
        ->groupBy('author_id')
        ->orderBy('created_at', 'desc')
        ->paginate(5);

我收到一个错误。

SQLSTATE[42803]:分组错误:7 错误:列“author_masks.id” 必须出现在 GROUP BY 子句中或在聚合函数中使用 LINE 1: select * from "author_masks" where "company_id" = $1 group b... ^ (SQL: select * from "author_masks" where "company_id" = 1 group by "author_id" order by "created_at" desc limit 5 offset 0)

【问题讨论】:

【参考方案1】:

不幸的是,无法使用 PostgreSQL 运行第二个查询,因为它要求 SELECT 列表中指定的所有字段都属于 GROUP BY 表达式。

您可以查看here

【讨论】:

谢谢。但是为什么第一个查询不起作用?不返回错误,只是没有任何变化(例如,我有 3 条 author_id = 1 的记录,但它返回 3 条记录而不是 1 条)。

以上是关于Laravel groupBy 不能与 PostgreSQL 一起正常工作的主要内容,如果未能解决你的问题,请参考以下文章

Laravel Eloquent:与 groupBy 求和

laravel groupby 与数组

Laravel 6,MYSQL - 如何使用 Laravel Querybuilder 或 Model Eloquent 将子查询与 GroupBY 左连接?

Laravel使用Sum和Groupby

如何在关系 Laravel 中使用“groupBy”

从 laravel 中的 groupBy 获取行 ID