4
3

More than 3 years have passed since last update.

【Laravel】バリデーション(条件付き必須項目)

Last updated at Posted at 2021-08-03

はじめに

Laravelでの必須項目のバリデーション設定にて、
「ここの項目に値があれば、こっちの項目を必須にしたい」
なんて思っていた際に便利なバリデーションがあったため、備忘録として残します。

開発環境

php 7.4.7
Laravel 8.16.1

やりたかったこと

項目A, B, Cいずれかに値がひとつでもあれば、全て必須項目にしたい
image.png

条件付きrequired種類

・required_if
 => "指定した項目" が "指定した値" であれば入力必須

・required_unless
 => "指定した項目" が "指定した値" でなければ入力必須

・required_with
 => "指定した項目" が "どれか一つでも記載" されていれば入力必須

・required_with_all
 => "指定した項目" が "すべて記載" されていれば入力必須

・required_without
 => "指定した項目" が "それは一つでも未記入" であれば入力必須

・required_without_all
 => "指定した項目" が "すべて未記入" であれば入力必須

使い方

今回は「required_with」が適用できそうです!
例はRequestsでバリデーションを設定しています。

Requests/Test.php
    public static function rules()
    {
        $validate = [
            'item_a' => ['required_with:item_b, item_c'],
            'item_b' => ['required_with:item_a, item_c'],
            'item_c' => ['required_with:item_a ,item_b']                   
        ];
        return $validate;
    }

image.png

問題なくバリデーションが付与されているようですね。

デモ

Animation3.gif

終わりに

今までifを使用して入力があれば必須というコードを書いていたのですが、見つけた時は驚愕しました。
いやぁ、知らないことばかりです...。
余談ですがデモのようにバリデーションメッセージを変更する場合は下記のようにします。

Requests/Test.php
    public function attributes()
    {
        return [
            'item_a' => '項目A',
            'item_b' => '項目B',
            'item_c' => '項目C',
        ];
    }

    public function messages()
    {
        return [
            'required_with' => ':attributeは必須です。(:valuesのいずれかに記載がある場合)',
        ];
    }

制御系をかじっているかたなら常識なのかもしれませんが、誰かの参考にでもなれば幸いです。

4
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
3