[Laravel] Eloquentとページネーション(1)
- 2020年10月30日
- 技術情報
今回はLaravel標準のO/Rマッパー「Eloquent」を使用したデータ取得方法を紹介したいと思います。
プライマリキーを使用したレコード検索
プライマリキー(id)をキーとして条件設定をおこない検索をおこなう場合、SQLでは以下のように記述します。
select * from students where id = '1';
Eloquentを使用した場合、以下のようにしてシンプルに取得できます。
Student::find(1);
Eloquentでは、初期状態ではid(int, auto_increment)をプライマリキーとして取り扱われます。
id以外の任意のカラムをプライマリキーとして設定している場合は、Modelの調整が必要になります。
テーブル内の特定のカラムを取得する場合は以下のように記述します。
Student::find(1)->name;
任意のカラムに検索条件を設定して抽出する
SQLでは以下のようにwhereを使用して任意のカラムに検索条件を設定してレコードを抽出することができます。
select * from students where name = '山田';
Eloquentで上記のような条件設定をおこなう場合、whereメソッドを使用します。
Student::where('name','山田')->get();
上記で検索をおこなった場合、「名前」が「山田」のレコードが複数ある場合も考えられます。
最初の1件のみ取得したい場合は以下のように指定することができます。
Student::where('name','山田')->first();
whereメソッドでの条件指定方法
whereメソッドでは上記のような完全一致での条件指定以外でも、柔軟な条件設定が可能です。
サンプルを以下に記載します。
Student::where('age','<','20')->get();
上記のように記載することで「年齢が20歳以下の学生」が抽出できます。
Student::where('email','like','%gmail%')->get();
上記のように記載することでメールアドレスに「gmail」という文字列を含んだレコードが抽出できます。
whereInメソッドを使用して対象を絞り込むことも可能です。
検索フォームに複数選択のチェックボックスが用意されている場合などに便利に使用できます。
以下のように記載することで都道府県が「大阪」または「東京」または「名古屋」のいずれかに属するレコードの取得がおこなえます。
Student::whereIn('pref',['大阪','東京','名古屋'])->get();
また、whereBetweenで範囲を絞り込んだ検索も可能です。
以下の例では年齢が10歳から20歳までの学生のレコードを抽出しています。
Student::whereBetween('age',['10','20'])->get();
以上で紹介したメソッドはそれぞれ否定形も用意されています。
以下の例では都道府県が「大阪」または「東京」または「名古屋」以外で登録されているレコードの取得がおこなえます。
Student::whereNotIn('pref',['大阪','東京','名古屋'])->get();
以下の例では年齢が10歳から20歳までではない学生のレコードを抽出しています。
Student::whereNotBetween('age',['10','20'])->get();
レコードカラムがNullかどうかの判定をおこなうには以下のように記載します。
Student::whereNull('name')->get();
Nullではないレコードを抽出する場合は以下のように記載します。
Student::whereNotNull('name')->get();
次回は複数の検索条件を組み合わせて使用する方法を紹介します。
金曜日担当:nishida
nishida at 2020年10月30日 10:00:58