もがき系プログラマの日常

もがき系エンジニアの勉強したこと、日常のこと、気になっている技術、備忘録などを紹介するブログです。

laravelのvalidationのuniqueでsoftDeleteされたものを除外する

はじめに

こんばんは。簡単ですが、ちょっと考えたところがあったので、ブログに残しておきます。

laravelのvalidationのお話です。

readouble.com

本題

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() もメソッドチェーンで一緒にかけます。

これで、自分がやりたかったことは実現できました!

終わりに

簡単ですが、今回はこれで終わりです!

最近筋トレやり始めましたが、いつまで続くか。。。

がんばります。。。