LaravelにてEloquentのfindとfirstOrFailにハマったけど、解決した話
はじめに
以下のような使い方をしてしまい、想定した結果にならずハマりました
// $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();
$ php artisan -V
Laravel Framework 5.8.29
- 以下のモデルは作成済み
- App/User.php
結論
// $idには1が入っている
$user = User::find($id)->firstOrFail();
// $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();
参考
Author And Source
この問題について(LaravelにてEloquentのfindとfirstOrFailにハマったけど、解決した話), 我々は、より多くの情報をここで見つけました https://qiita.com/akido_/items/0a8040c848dbfe18206e著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .