Let's start from here

データベースとの連携(3)クエリビルダ

SQLでは、集計関数や並び順、グループ化など様々な条件を組み合わせてデータを加工・抽出しています。LaravelのクエリビルダでもSQLのクエリと同様にPHPの構文としてメソッドチェーンで実装できます。
ここでは、クエリビルダでのクエリパターンを紹介します
テーブルは、前項目で作成済みの「members」テーブルを対象としています。

データの取得

複数件取得(条件がないのでメンバーテーブルから全件数取得)
get()

最初の1件を取得
first()

取得カラムの指定

select( ‘カラム1’ , ‘カラム2’ , ‘カラム2’ )

◆レコードの抽出条件

where( ‘カラム名’ , ‘比較演算子’ , ‘比較する値’ )

年齢が20歳より上のレコードを全件取得します

第二引数がイコールの場合に限っては、比較演算子を省略し、引数は2つで取得できます。

年齢が20歳のレコードを全件取得します

複数条件の場合は、whereを複数つなげます

年齢が20歳以上で名前に「木」を含むレコードを取得

where() を複数つなげると「and」(複数条件を満たす)となります。
「or」(いづれかの条件が満たせれば)にする場合は、orWhere() を使います

年齢が20歳、もしくは30歳のレコードを全件取得します

集計

レコードの件数を取得
count()

指定したカラムの最大値
max()

指定したカラムの最小値
max()

指定したカラムの平均値
avg()

指定したカラムの合計値
sum()

並び順(ソート)

抽出レコードの並び順:昇順(asc)、降順(desc)
orderBy( ‘カラム名’ , ‘昇順か降順を指定’ )

部分的にSQL文を直接記述する場合

出力の整形、SQL関数の使用や抽出条件など場合によっては、SQLクエリを直接したい場合もあります。
DB::rawメソッドを使ってSQL文を記述します。

項目名に別名をつけています。
これだけ見てもあまりピントきません。次のgroupByと組み合わせるとよりわかりやすいです。

グループ単位で表示する

groupBy( ‘ グループぶするカラム’ );

年齢でグループ化しています。グループ化した各年齢の人数を取得しています(取得カラムは、年齢と人数)。

テーブルの結合

join( ‘結合テーブル’ , ‘結合元テーブル名.結合するカラム名’ , ‘=’ , ‘結合先テーブル名.リンクするカラム名’ )

注意)両テーブルに同じカラム名の項目がある場合は、別名にして取得する必要があります。

leftJoin( ‘結合テーブル’ , ‘結合元テーブル名.結合するカラム名’ , ‘=’ , ‘結合先テーブル名.リンクするカラム名’ )