Laravel `lt` 和 'gt' 验证规则仅当目标字段存在时

Laravel `lt` and 'gt' validation rules only if target fields are present

我的请求中有两个整数字段需要验证,min_heightmax_height,两者都是可选的,但 min_height 低于 max_heightmax_height 会(当然)大于 min_height.

使用验证规则如下

'min_height' => ['nullable', 'integer', 'lt:max_height'],
'max_height' => ['nullable', 'integer', 'gt:min_height'],

当其中一个存在但另一个不存在时,这当然会给我错误,因为 lt/gt 验证规则检查 null 请求字段。

如何才能让 lt/gt 仅在其他字段存在时才被选中? 有没有办法通过内置验证规则来实现这一点,还是我必须实现自定义验证器?

更新

可能我还不够清楚:我的两个字段都是可以为空的并且彼此独立,所以可以接收min_height而不是[=14] =] 反之亦然:这使得 required_with 之类的规则不适用 对于我的用例。

您可以在第一个参数上使用 sometimes。看一眼: https://laravel.com/docs/7.x/validation#conditionally-adding-rules

您可以尝试使用 required_with 条件规则。例如你的条件将

'min_height' => 'required_with:max_height|lt:max_height',
'max_height' => 'required_with:min_height|gt:min_height',

正如@vinayak-sarawagi 所说,此用例没有 built-in 解决方案,因此必须实施自定义验证规则以在实际比较值之前检查可选的 null 参数。