Uniqueバリデーションで、論理削除を考慮するなど、条件をカスタマイズしたいTweetこんにちは、@yoheiMuneです。Laravelのバリデーションはそれだけで非常に強力ですが、ドキュメントには記載のない、拡張ポイントがあります。今日はUniqueバリデーションについて、拡張できるポイントをブログに書きたいと思います。何がしたいのかLaravelのバリデーションの一つUniqueチェックを用いると、データベースのテーブルの指定したカラムで、値がユニークであるか(一意であるか)をチェックできます。以下のように実装します。'unique:users']);また、テーブルのどのカラムを用いて検査するのか、明示的に指定することもできます。'unique:users,mail_address']);これだけでも非常に便利なのですが、時には検査対象を限定したい場合があります。以下のような場合です。論理削除されたデータは、一意チェックの対象外にしたい。(ユーザーデータ更新時に)自分のemailは一意チェック対象外にしたい。(何か会社という組織があったとして)会社の中でemailを一意にしたい(他の会社には同一emailがあってもOK)。それらに対応できるような拡張ポイントが、Laravelでは用意されています。今日はそれをブログに書きたいと思います。論理削除データを、一意チェックの対象外にしたい以下のようにして、論理削除されたデータを除外して、一意チェックすることができます。'email')->whereNull('deleted_at')]]);ここではdeleted_atがnullのレコード(つまり論理削除されていないレコード)のみをチェック対象としています。自分のemailアドレスはチェック対象外にしたい一意チェックに、除外条件も追加できます。ここではwhereNotを利用します。$myEmail)]]);これで自分のメールアドレスを、チェック対象外にできます。会社の中でemailを一意にしたいwhereを用いることで、対象を絞って一意チェックを行うこともできます。$companyId)]]);このように自由に対象を絞ることができます。requiredなど、他のバリデーションと組み合わせる他のバリデーションと組み合わせて、使うこともできます。利用したいバリデーションを、配列形式で指定します。'email')->whereNull('deleted_at')]]);ここではbail、required、email、uniqueを配列で指定することで、複数のバリデーションを実現しています。詳しく今回紹介した機能は、illuminate/validationの実装にあります。Unique.phpやDatabaseRule.phpの実装を読むと他にも、whereInなどがあることがわかります。最後にLaravelは、調べれば調べるほどに色々な機能が見つかって楽しいなぁと感じる今日この頃です。Laravelでの開発をたくさんしていてノウハウもたまってきたので、ブログにもドシドシと書けたらと思います。最後になりますが本ブログでは、PHP、フロントエンド、Python、サーバー、インフラ、Swift、Node.js、Java、Linux、機械学習、などの技術トピックを発信をしていきます。「プログラミングで困ったその時の、解決の糸口に!」そんな目標でブログを書き続けています。Laravel5+のマイグレーションで、カラムをnullableに変更するもしご興味をお持ち頂けましたら、ぜひRSSへの登録をお願い致します。Munesada)です。世の中をさらに便利に面白くをモットーにWeb界隈で活動しています。Now機械学習/AI/自然言語処理のホットな"今"をお届けするキュレーションメディアです。