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

16

我的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个回答

42

如果您想进行原始的groupBy,可以按照以下方式操作...

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

那比我预期的要容易!谢谢。 - Geoff Clayton
这个答案对我很有帮助,直到我遇到了这个问题:https://dev59.com/9Zjga4cB1Zd3GeqPOr5e - Ryan
那似乎是一个不同的问题,对这个问题没有任何上下文。 - user1669496
我之前无法使用 GROUP BY column DESC ... 这个答案帮了我大忙,谢谢! - Sodj
@Sodj 你可以使用 ORDER BY column DESC - Yuvrajsinh Jhala

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接