find()とfindOrFail()とは
Laravelで提供されているデータ操作の為の機能であるEloquent ORMのメソッドのひとつ。指定したidのレコードを取得することができる。
2つのメソッドの違い
定義の仕方
find()
$flight = App\Flight::find(1);
findOrFail()
$flight = App\Flight::findOrFail((1);
idが見つからなかったとき
- find():nullを返す。
- findOrFail():エラー(404HTTPレスポンス)を返す。例外処理。
どちらを使うべきか
findOrFail()の方が良い(と思う)
- 見つからなかった時に、nullかエラーか、どっちを出したいかで決めると良い。
find()
- 全然違う場所にエラーが出てしまい、原因を見つけることが難しい。
- コントローラーでid番号を探すクエリを出したのに、エラー画面では、Viewファイルでエラーがあると出てしまう。
findOrFail()
- 詳細なエラーが原因がわからないことがデメリット。
- ユーザーにエラー画面を見せたくないときはこっち。
ただし…
- 「find()でnullが出たら〇〇する」のような、if文、条件分岐を続けて使うのであれば、find()を使った方が、条件分岐を書きやすい。
- 仮にfind()を使ってても、.envファイルを開いて、APP_DEBUGをtrueからfalseに書き換えれば、同じように、404 | Not Foundが表示されるようになる。