LoginSignup
22
19

More than 5 years have passed since last update.

LaravelのバリデーションでDBのテーブルの値を条件に使用する方法

Posted at

Laravelのバリデーションルールはさまざまなものが用意されていて、非常に便利です。
バリデーションルールにDBのテーブルの値を見てチェックするようなルールを追加したかったため調べてみたところ、そこもカバーされていました。

exists:テーブル、カラム
:フィールドの値が、指定されたデータベーステーブルに存在することをバリデートします。

例えば、categoriesテーブルのIDにその値が格納されているかどうかをバリデートしたいときは、以下の様な設定になります。

$rules = ['category' => 'required|exists:categories,id'];

しかし、このままだとSoftDeletesしたレコードも対象となってしまいます。そこはLaravelがよしなにしてくれるわけじゃないんですね…。
ということなので、以下のようにdeleted_at=NULLを条件に追加しましょう。

$rules = ['category' => 'required|exists:categories,id,deleted_at,NULL'];

これでSoftDeletesされたレコードは対象外となります。
ちなみに注意するべきところとしては、NULLまたはNOT_NULLを大文字で指定しないと動作しません。nullでもなく、Nullでもないです。小文字で指定すると文字列として指定されてしまうため、気をつけましょう。

参考記事
http://readouble.com/laravel/5/1/ja/validation.html

22
19
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
22
19