9
2

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 DBレコードの存在判定

Posted at

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の公式ドキュメントや他の記事を参考にして、引き続きアプリの実装をしていきたいと思います。

9
2
1

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
9
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?