Laravel 查询构建器 - 如何按别名分组,或进行原始 groupBy

Posted

技术标签:

【中文标题】Laravel 查询构建器 - 如何按别名分组,或进行原始 groupBy【英文标题】:Laravel query builder - How to either group by alias, or do raw groupBy 【发布时间】:2015-06-04 21:45:51 【问题描述】:

我的 Laravel 5 应用包含一个动态查询生成器,用于运行报表。我需要一些 group by 条款并且遇到了问题。如果我在那里使用实际的 sql,我可能会遇到问题,因为有时在 sql 中需要一个 sql 命令(而不是简单的列名),即 - DAYNAME(table_name.date_column)。 Laravel 破坏了这个:

\`DAYNAME(table_name\`.\`date_column)\`

对于查询的选择部分,我可以使用 selectRaw,但似乎没有 group by 的等价物。

我想过使用别名(所有选择都是别名),但 Laravel 也将它们包装在“`”字符中。此外 - 我的应用程序需要与 mysql 和 SQL Server 一起使用,据我所知,后者不允许在查询的 group by 部分中使用别名。

我可以在 Illuminate\Database\Query\Grammars\Grammar 中找到编译 group by 的方法(compileGroups),我想我可以覆盖它,但我不太确定我会怎么做(已阅读Laravel 文档)。

【问题讨论】:

【参考方案1】:

如果你想做原始的 groupBy,你可以这样做......

...->groupBy(DB::raw('some_alias'))

【讨论】:

嗯,这比我预期的要容易!谢谢。 这个答案帮助了我,直到我遇到这个问题:***.com/q/38262133/470749 这似乎是一个不同的问题,并没有为这个问题添加任何上下文。 我做不到GROUP BY column DESC ...这个答案救了我,谢谢! @Sodj 你可以做ORDER By column DESC

以上是关于Laravel 查询构建器 - 如何按别名分组,或进行原始 groupBy的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 中数据库查询构建器的位置

按别名分组 (Oracle)

将带有变量的闭包传递给 Laravel 查询构建器中的 where 方法

如何在查询构建器 laravel 上从每个组中获取多个数据

首先按选择器或媒体查询对样式进行分组

Laravel 5.6 查询构建器总和