【Laravel】初心者の方は絶対覚えて!Eloquentデータ取得処理まとめ

2021年8月5日

こんにちは。今回はEloquentの取得系処理メソッドをまとめてみました。それぞれの利用シーンも書いてみましたので参考にしていただければ幸いです。

事前準備として今回Eloquentで操作するusersテーブルを作成し、以下のデータを用意しました。

idnameemail
1joejoe@xxx.xxx
2bobbob@yyy.yyy

tinkerを使ってusersテーブルからデータを取得していきたいと思います。それではみていきましょう。

Eloquent取得処理

get

汎用的な取得メソッドです。QueryBuilderの構文が使えるのでwhereなどと組み合わせて使うことができます。結果は単一、複数に関わらずコレクションで返るので注意が必要です。モデルの値を操作する際はforeachで回す必要があります。

User::where('name','bob')->get();

=> Illuminate\Database\Eloquent\Collection {#4345
     all: [
       App\Models\User {#4095
         id: "2",
         name: "bob",
         email: "bob@yyy.yyy",
       },
     ],
   }

first

先頭の1件を取得します。orderByと組み合わせて使うのが一般的です。単一のオブジェクトを返すので、取り回しが便利です(Foreachで回さなくて良い)。単一の値を取得する場合は迷わずこれをつかいましょう。

User::orderBy('name')->first();

=> App\Models\User {#4132
     id: "2",
     name: "bob",
     email: "bob@yyy.yyy",
   }

all

モデルの全てのレコードを取得します。Eloquentから簡単にデータを取得できます。しかし絞り込みが効かないので、実際の開発であまり活躍するシーンは無いように思います。

>>> User::all();

=> Illuminate\Database\Eloquent\Collection {#4095
     all: [
       App\Models\User {#3727
         id: "1",
         name: "joe",
         email: "joe@xxx.xxx",
       },
       App\Models\User {#4133
         id: "2",
         name: "bob",
         email: "bob@yyy.yyy",
       },
     ],
   }

find

主キーを指定してモデルを取得します。デフォルトではidを指定しますが、モデルで主キーを変更することもできます。

>>> User::find(1);

=> App\Models\User {#3406
     id: "1",
     name: "joe",
   }

firstOr

firstでモデルが取得出来ない場合に別の処理を実行したい場合に使用します。引数にはクロージャ(無名関数)を指定し、モデルが取得できなかった場合に実行する処理を記述します。「値が見つからない場合」に何か他の処理に分岐する場合に使います。

User::where('name','boby')->firstOr(function(){
    echo('boby not found');
});

boby not found⏎

findOrFail, firstOrFail

findやfirstが失敗した時にModelNotFoudExceptionをスローします。この例外をキャッチしない場合は404エラーを返します。モデルが取得できない=エラーの場合に使い勝手が良いです。私自身も良く使っています。

User::findOrFail(3);

Illuminate\Database\Eloquent\ModelNotFoundException with message 'No query results for model [App\Models\User] 3'

Laravel

Posted by kobainmac