[Laravel]バリデーションルールを使って特定のカラムで存在チェックする方法

はじめに

Laravelでバリデーションを使用する際にルール(rules)で特定のテーブルのカラムを使用して存在チェックする方法です。

以下のようなusersテーブルがあるとします。

idnamepassword

このような場合には通常以下のようなrulesを設定すると存在チェックができます。

ですが例えば以下のようなuser_infoテーブルがあったときリレーション先のカラムから存在チェックをしたい(user_infoテーブルのuser_idがuserテーブルのid列に存在するかをバリデーションでチェックしたい)場合に下記のようにrulesを書くとエラーになります。

iduser_idaddressphone_numberage

具体的には
SQLSTATE[42S22]: Column not found: 1054 Unknown column ‘user_id' in 'where clause' (SQL: select count(*) as aggregate from users where user_id = 1)

このようなエラーが出ると思います。

解決方法

例のような場合、以下のようにカンマで区切ってカラムを指定すると、特定のテーブルの特定カラム名でチェックすることが可能です。

以上です。

おすすめの記事