はじめに
Laravelでバリデーションを使用する際にルール(rules)で特定のテーブルのカラムを使用して存在チェックする方法です。
例
以下のようなusersテーブルがあるとします。
id | name | password |
このような場合には通常以下のようなrulesを設定すると存在チェックができます。
1 2 3 4 5 6 | public function rules() { return [ 'id' => ['exists:users'], ]; } |
ですが例えば以下のようなuser_infoテーブルがあったときリレーション先のカラムから存在チェックをしたい(user_infoテーブルのuser_idがuserテーブルのid列に存在するかをバリデーションでチェックしたい)場合に下記のようにrulesを書くとエラーになります。
id | user_id | address | phone_number | age |
1 2 3 4 5 6 | public function rules() { return [ 'user_id' => ['exists:users'], ]; } |
具体的には
SQLSTATE[42S22]: Column not found: 1054 Unknown column ‘user_id' in 'where clause' (SQL: select count(*) as aggregate from users
where user_id
= 1)
このようなエラーが出ると思います。
解決方法
例のような場合、以下のようにカンマで区切ってカラムを指定すると、特定のテーブルの特定カラム名でチェックすることが可能です。
1 2 3 4 5 6 | public function rules() { return [ 'user_id' => ['exists:users,id'], ]; } |
以上です。