如果字段不等于,则需要 Laravel 验证

And*_*ter 2 validation laravel laravel-validation laravel-5.7

我的控制器中有自定义验证规则:

$this->validate($request, [
    'currency' => [
        'required',
        'numeric',
        'min:0',
        'max:7'
    ],
    'price' => [
        'nullable',
        "required_if:currency, !=, 0",
        'numeric',
        'min:1',
        'max:1000000'
    ],
], $messages);
Run Code Online (Sandbox Code Playgroud)

为什么required_if:currency, ==, 0在这种required_if:currency, !=, 0情况下工作而不工作?

在我的情况下,price仅当currency字段值不等于时才需要字段0

我也累了:

required_unless,currency,0
required_unless:currency,0
Run Code Online (Sandbox Code Playgroud)

Abe*_*ego 6

我建议你使用

required_unless:currency,0 根据 [1]:https : //laravel.com/docs/5.5/validation#rule-required-unless


Del*_*lan 3

required_if:currency, ==, 0之所以有效,是因为该currency值必须等于值名称后面的任何值(在本例中为currency)。换句话说,如果货币是或 ,price则在这种情况下需要。==0

因此,==在这种情况下,并不意味着通常的“等于”。它只是作为一个字符串值。这也是为什么required_if:currency, !=, 0它不能按您的预期工作的原因。

price要仅当currency字段值不等于 0时才使该字段为必填字段,您可以使用required_unless:currency,0.

换句话说,除非等于 0 price,否则始终需要。currency