はじめに
こんばんは。簡単ですが、ちょっと考えたところがあったので、ブログに残しておきます。
laravelのvalidationのお話です。
本題
laravelのvalidationで、uniqueがあると思ういます。
例えば、 emailカラムをuniqueにしたい場合は、例えば required|unique:users,email
みたいな感じでルールを記載できると思います。
新規登録の際は問題ないと思うんですが、編集の際は、この同じルールを使うと、既に存在しているのでバリデーションに引っかかり怒られます。
これを解除するには、以下みたいな感じで、このIDは除外するという方法がありました。
例えば以下は、自身のID以外がuniqueの対象になるという感じです。
<?php return [ 'email' => ['required', Rule::unique('users', 'email')->ignore(Auth::id())], ];
今回は、論理削除を使っているテーブルで、既に論理削除済みの場合は、uniqueルールから除外したいという感じでした。
調べてたらドンピシャな感じのがありました。
<?php return [ 'email' => ['required', Rule::unique('users', 'email')->where(static function ($query) { return $query->whereNull('deleted_at'); })] ];
もちろん除外IDの ignore()
もメソッドチェーンで一緒にかけます。
これで、自分がやりたかったことは実現できました!
終わりに
簡単ですが、今回はこれで終わりです!
最近筋トレやり始めましたが、いつまで続くか。。。
がんばります。。。