はじめに
laravelには、さまざまなバリデーションが用意されており、その中で入力された値が指定したテーブルに存在するかチェックするexistsが便利でしたので紹介します。
基本
'id' => ['exists:table']
table
テーブルのid
カラムに入力されたid値
が存在すること。
チェックするカラムを指定
'id' => ['exists:table,foreign_id']
table
テーブルのforeign_id
カラムに入力されたid値
が存在すること。
チェックするレコードを限定。
'id' => ['exists:table,foreign_id,deleted_flag,0']
table
テーブルのdeleted_flag
が0
であるレコードセットに対して、foreign_id
カラムに入力されたid値
が存在すること。
対象レコードの条件は複数指定可能。
注意点
便利ですが、注意点もあります。
例えば、idが数値で10桁であることをバリデーションするため
'id' => ['exists:table', 'digits:10']
と書くと、exists
(DBアクセス)が先に行われてしまうため、
場合によってはセキュリティ上の問題が発生する可能性があります。
ですので、下記の様にルールの順番を変更する必要があります。
'id' => ['digits:10', 'exists:table']
まとめ
こういった、フレームワークの便利機能を積極的に利用して効率を上げたいところですが、
安易に利用せず、問題点がないか詳細な調査も必要だと感じました。