web-dev-qa-db-ja.com

Laravelクエリビルダー-エイリアスでグループ化する方法、または生のgroupByを実行する方法

私のLaravel 5アプリには、レポートを実行するための動的クエリビルダーが含まれています。そこにgroupby句が必要で、問題が発生しました。そこで実際のSQLを使用すると、(単純な列名ではなく)SQLの中にsqlコマンドが必要になることがあるため、問題が発生する可能性があります。つまり、--DAYNAME(table_name.date_column)です。 Laravelはこれをマングルします:

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

クエリのselect部分には、selectRawを使用できますが、groupbyに相当するものがないようです。

エイリアスを使用することを考えました(すべての選択はエイリアスです)が、Laravelはそれらも「 `」文字でラップします。さらに、私のアプリはMySQLとSQL Serverの両方で動作する必要があり、私が知る限り、後者はクエリのgroupbyセクションでエイリアスを許可しません。

グループ化がコンパイルされるIlluminate\Database\Query\Grammars\Grammar(compileGroups)でメソッドを見つけることができ、オーバーライドできると思いますが、どうすればよいかわかりません(Laravel docs)。

11
Geoff Clayton

生のgroupByを実行したい場合は、次のようなことを実行できます...

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