はじめに
以下のような使い方をしてしまい、想定した結果にならずハマりました
// $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();