В моем контроллере есть настраиваемое правило проверки:
$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






required_if:currency, ==, 0 работает, потому что значение currency должно быть равно любому из значений, следующих за именем значения (в данном случае currency). Другими словами, price требуется в этом случае, если валюта либо ==, либо 0.
Так что == в данном случае не означает обычных «равных». Это просто принято как строковое значение. Вот почему required_if:currency, !=, 0 не работает так, как вы ожидали.
Чтобы сделать поле price обязательным только тогда, когда значение поля currency не равно 0, вы можете использовать required_unless:currency,0.
Другими словами, всегда требуется price, если только currency не равен 0.
Я бы посоветовал вам использовать
required_unless:currency,0according to [1]: https://laravel.com/docs/5.5/validation#rule-required-unless
Вы можете использовать это:
Rule::requiredIf($request->get('currency') != 0)
В моем случае тоже не работает, но все предлагают такой формат, как и вы.