以下の内容はhttps://kojirooooocks.hatenablog.com/entry/2020/07/15/024846より取得しました。


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

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

終わりに

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

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

がんばります。。。




以上の内容はhttps://kojirooooocks.hatenablog.com/entry/2020/07/15/024846より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14