【Laravel】バリデーションのUniqueルールをカスタマイズする

こんにちは!CODE CLUB965のKです!

今回は、LravelでバリデーションのUniqueルールを様々な条件にカスタマイズしたい時のやり方について書こうと思います。

Laravelのバリデーションの一つである「Unique(ユニーク)」チェックを用いると、DBのテーブルの指定したカラムの値がユニークであるかを判定できます。
ここで言うユニークとは、一意であるかどうかという意味です。

例えば、

$request->validate([
    'email' => 'unique:users'
]);

このような記述をした場合、usersテーブルのemailカラムで一意チェックをすることができます。

ただ、softDeleteを使って論理削除したデータをチェック対象外にしたい場合など、条件を追加したい場合があると思います。

要するに検査対象を限定したい場合の方法について今回は書こうと思います。

チェックに条件を追加する

例を見ながら説明した方が分かりやすいと思うので、例えば論理削除したデータを除外する時の場合を考えます。

$request->validate([
    'email' => 'required|unique:users,email,965,id,deleted_at,NULL'
]);

このような感じで記述することができます。

これは、SQL文で見ると分かりやすいと思います。
required(必須)は無視して、unique以降の意味は以下のようになります。

SELECT email 
FROM users
WHERE id != '965'
AND deleted_at = 'NULL'

uniqueのパラメータの内容については以下の通りです。

パラメータ内容必須
第1:usersテーブル名
第2:emailカラム名
第3:965除外データ除外したいデータがある場合、必須
(デフォルトはIDのデータを記述する、論理削除非対応)
第4:id除外カラム名デフォルトはID
第3パラメータが第1パラメータ(テーブル)id以外の場合、必須
第5:deleted_at追加条件のカラム下記の場合、必須
・論理削除
・条件追加
第6:NULL追加条件の内容

以上のように、条件を追加できます。

バリデーションについて詳しく知りたい場合は、公式の方もチェックするといいと思います。


・Laravel 8.x バリデーション
https://readouble.com/laravel/8.x/ja/validation.html

ちなみにLaravelでの論理削除の実装方法については記事に書いていますので、気になる方はぜひ読んでみて下さい!

それでは、また!

Follow me!