LaravelのクエリビルダでDBレコードの存在チェック
記事内容
Laravelでオリジナルアプリのバックエンドを実装していく際に、DBにレコードが存在すればtrueを返し(ページ遷移)、レコードが存在しなければfalseを返す(エラーメッセージを表示する)という機能を実装したので、備忘録として残したいと思います。開発環境
Laravel 8.22.1 PHP:8.0.1 MySQL:8.0.23 MacOS:11.1 ( Big Sur )DBレコードの存在チェック
○○Controller.php
DB::table('table名')->where(column, $data)->exists();
クエリビルダの基本的な書き方に、existsメソッドを繋げて記述することで簡単にレコードの存在を判定できます。
実際の記述
今回僕は、下記のように記述しました。
内容としては、ユーザーによるフォームからのリクエスト内容と一致するレコードが、存在するかどうかで条件分岐しています。
○○Controller.php
$user = User::all()->where('id', $request->id)->first();
$msg = ['msg' => '入力されたIDは存在しません'];
if (DB::table('users')->where('id', $request->id)->exists() && [$request->id === $users->id])
{
return redirect()->route('home');
} else {
return view('login', $msg);
ifのカッコ内の記述により、DB内にレコードが存在していて且つ、フォームから送信された内容と一致する場合は、homeビューが返され、DBにレコードが存在しない場合は$msg変数の内容とともにloginビューが返される。
あとがき
今回のアプリを作っていく過程で、フォームからDBにレコードが存在しない値を入力された際、
「Attempt to read property "id" on null」というエラーにつまづき、なかなか前へ進めなかったので、その解決策を模索していたところ、本記事に記載した対処法に至りました。
他にも解決策はあると思いますので、laravelの公式ドキュメントや他の記事を参考にして、引き続きアプリの実装をしていきたいと思います。