Правило gte проверки Laravel

#validation #laravel-validation #laravel-5.8

#проверка #laravel-проверка #laravel-5.8

Вопрос:

Я работаю над веб-приложением, и мне нужно было проверить форму. Форма содержит два числовых поля, и мне нужно убедиться, что одно из них больше или равно другому.

Итак, я использовал эти правила.

 [
     'adults' => ['required', 'numeric'],
     'people' => ['required', 'numeric', 'gte:adults'],
]
  

Все остальное работает, за исключением одного случая. Скажем, adults отсутствует или null но people нет. Тогда я бы ожидал adults is required сообщения. Но вместо этого я получаю

 InvalidArgumentException: The values under comparison must be of the same type.
  

Таким образом, кажется, что gte правила сравнивают типы двух полей, даже если одно из них null с required правилом. Как я могу обойти это?

Комментарии:

1. Каковы ошибки проверки и как выглядит тело запроса?

2. Я обновил свой вопрос, чтобы включить ошибку, которую я получаю в конкретном случае.

Ответ №1:

Я думаю, что это проблема с порядком вычисления правил.

Если adults вычисляется первым, это приведет к сбою с adults is required ошибкой. Однако, в случае, если people сначала оценивается, он пытается сравнить его с adults, выдавая ошибку. Вы могли бы решить эту проблему, условно добавив последнее правило:

 [
     'adults' => ['required', 'numeric'],
     'people' => ['required', 'numeric', $request->has('adults') ? 'gte:adults' : ''],
]