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
でもないです。小文字で指定すると文字列として指定されてしまうため、気をつけましょう。