[Laravel] Eloquentとページネーション(2)

今回はLaravel標準のO/Rマッパー「Eloquent」を使用したデータ取得方法を紹介したいと思います。本記事は前回の「[Laravel] Eloquentとページネーション(1)」の続きになります。

複数のwhere条件を指定する場合

whereメソッドを連続して呼び出すことで複数のwhere条件をand検索で設定することが可能です。

Student::where('name','山田')->where('age','<','20')->get();

上記の場合は、「名前」が「山田」でかつ年齢が20歳以下のレコードを抽出します。

and条件ではなくor条件を設定したい場合はorWhereメソッドを使用します。

Student::where('name','山田')->orWhere('age','<','20')->get();

上記の場合は、「名前」が「山田」または年齢が20歳以下のレコードを抽出します。

where条件部分を任意のSQLで記述したい場合

whereRawメソッドを使用して任意のSQLを条件に設定することができます。
プレースホルダーは「?」で設定して、設定する値を配列で渡すことができます。

$param = ['山田','20'];
$res = Student::whereRaw('name = ? and age < ?', $param)->get();

レコードの並び替え

SQLのorder byで並び替えがおこなえるように、EloquentではorderByメソッドで並び替えがおこなうことが可能です。
引数にソートをおこなうカラムおよび並び順(asc or desc)を指定します。
複数のソート順がある場合は、orderByメソッドを連結して使用することも可能です。

Student::orderBy('age', 'desc')->get();

また、offsetやlimitと併用することにより、抽出するレコードの範囲を指定することができます。

Student::orderBy('age', 'desc')->offset(10)->limit(5)->get();

上記の例では、offsetやlimitを指定することで、先頭から上位10件のレコードをスキップして11件目から5件のレコードを抽出しています。

これまでにあげた例ではselectするカラムを特に明示しませんでしたので、SQLで*を使用するように、対象テーブルに存在するすべてのカラムを抽出対象としてきましたが、selectメソッドでカラムを指定することで取得するカラムを制限することも可能です。

$res = Student::select('name', 'age')->get();

レコードのグループ化と集計

SQLではgroup byでグループ化がおこなえるように、EloquentではgroupByメソッドでグループ化がおこなえます。
以下の例では「部活動の単位で学生の平均年齢」を求めています。

$res = Student::groupBy('club')
->selectRaw('club, avg(age) as avg_age')->get();

whereRawメソッドと同様に素のSQLを部分的に併用したい場合はselectRawが使用できます。

次回は Eloquent を使用したページネーションの方法について紹介したいと思います。

金曜日担当:nishida



アプリ関連ニュース

お問い合わせはこちら

お問い合わせ・ご相談はお電話、またはお問い合わせフォームよりお受け付けいたしております。

tel. 06-6454-8833(平日 10:00~17:00)

お問い合わせフォーム