2
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

LaravelにてEloquentのfindとfirstOrFailにハマったけど、解決した話

Last updated at Posted at 2020-01-10

はじめに

以下のような使い方をしてしまい、想定した結果にならずハマりました

// $idには1が入っている
$user = User::find($id)->firstOrFail();

知ってしまった今、なんてこと無い話になりますが、未来の自分に向けて備忘録を残しておきます

Laravelのバージョン

$ php artisan -V
Laravel Framework 5.8.29

前提

  • 以下のモデルは作成済み
    • App/User.php

結論

// $idには1が入っている
$user = User::find($id)->firstOrFail();

上記のような使い方をすると、以下のように2回SQLが実行されていました

select * from users where id = 1;
select * from users limit 1;

そのため、変数には2回目のSQLの実行結果が入っており、想定した動作になっていませんでした

対策

以下の書き方であれば、同じ動きになるようです

その①

// $idには1が入っている
$user = User::findOrFail($id);

その② firstOrFailを使用する場合(where句のあとはOKでした)

// $idには1が入っている
$user = User::where('id', $id)->firstOrFail();

参考

Laravel 5.8 Eloquent:利用の開始

2
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?