Laravelのバリデーターは予め多彩なルールが用意されています。 私自身は.Net歴が長いので数値範囲はRangeのアノテーションみたいな感じで指定すればいいという先入観からちょっとハマりました。 …
LaravelのEloquentでGroupByの使い方について、まとめたいと思います。
まずはデータアクセス方法を整理
Laravelはデータソースに対するデータアクセス方法として、Eloquent(ORM)とクエリビルダが用意されています。
クエリビルダは取得結果をCollectionとして返却します。
Eloquentは取得結果をCollectionを継承したEloquent\Collectionを返却します。
返却されるクラスは、両方ともCollection
を含むので同じように扱うことが出来る反面、
異なるデータアクセス方法で取得しているという意識が薄れがちです。
EloquentでGroupBy
以前のMySQLはGroup対象ではないカラムをSELECT句に追加しても何が取得されるか保証はないけれど動く
という緩い仕様でした。
本来GroupByはGroup対象に指定したカラムのみSELECT句に含み
、あとは集約関数を追加します。
集約関数は、DB::rawで直接SQL文を記載することになります。
個人的にはORMを使っていながらSQLを直書きするのは抵抗がありますが、仕方がありません。
$user_info = Usermeta::groupBy('browser')
->select('browser', DB::raw('count(*) as total'))
->get();
クエリビルダでGroupBy
クエリビルダで記載する場合も基本的に変わりません。
$user_info = DB::table('usermetas')
->select('browser', DB::raw('count(*) as total'))
->groupBy('browser')
->get();
groupByに複数キーを指定する
groupByメソッドは可変長引数に対応しています。
複数引数を指定したり、配列で指定することが出来ます。
groupBy('browser', 'name')
groupBy(['browser', 'name'])
コメントを書く