如果字段不等于

问题描述 投票:0回答:3

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

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

为什么在

required_if:currency, ==, 0
工作而不是在这个
required_if:currency, !=, 0
情况下工作?

就我而言,仅当

price
字段值不等于
currency
 时才需要 
0

字段

我也累了:

required_unless,currency,0
required_unless:currency,0
laravel validation laravel-5.7 laravel-validation
3个回答
16
投票

我建议你使用

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


3
投票

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

因此,在这种情况下,

==
并不意味着通常的“等于”。它只是被视为字符串值。这也是为什么
required_if:currency, !=, 0
无法按您的预期工作。

要仅当

price
字段值不等于 0 时才需要
currency
字段,您可以使用
required_unless:currency,0

换句话说,

price
始终是必需的,除非
currency
等于0。


1
投票

您可以使用这个:

use Illuminate\Validation\Rule;

Rule::requiredIf($request->get('currency') != 0)
© www.soinside.com 2019 - 2024. All rights reserved.