LoginSignup
2
1

More than 3 years have passed since last update.

【Laravel】バリデーションでユニーク制約を無視したい

Last updated at Posted at 2019-12-17

ユニーク制約を無視したい場合とは?

例)
nameカラムとemailカラムにユニーク制約がかかっていた場合。
nameとemailのどちらか一方だけを変更して(一方は同じ値のままで)登録することができない。
 →ユニーク制約はすでにDB上にある値をはじいてしまうため。
              ↓
自身のIDでログインしている場合にその制約を無視したい

Ruleクラスで無視するルールを追加

バリデータ内に自身のIDでログインしているときのみ制約を無視するルールを追加します。
公式ドキュメント https://readouble.com/laravel/5.5/ja/validation.html

use Illuminate\Support\Facades\Validator;
use Illuminate\Validation\Rule;

Validator::make($data,[
            "name"   => ["required", "string", "max:50", Rule::unique("users")->ignore($user->id)],
            "email"         => ["required", "string", "email", "max:255", Rule::unique("users")->ignore($user->id)]
        ])->validate();

Rule::uniqueの引数でテーブルを指定。
ignoreメソッドによってログインしているユーザに限定します。id以外を用いる場合は第二引数にそのカラムを入れる.

これでnameのみemailのみの変更ができるようになります。

2
1
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
2
1