仅当存在目标字段时,Laravel `lt` 和 'gt' 验证规则
Posted
技术标签:
【中文标题】仅当存在目标字段时,Laravel `lt` 和 \'gt\' 验证规则【英文标题】:Laravel `lt` and 'gt' validation rules only if target fields are present仅当存在目标字段时,Laravel `lt` 和 'gt' 验证规则 【发布时间】:2020-10-05 20:18:42 【问题描述】:我有两个整数字段要在我的请求中验证,min_height
和 max_height
,两者都是可选的,但 min_height
低于 max_height
和 max_height
可以(当然)更大比min_height
.
使用验证规则如下
'min_height' => ['nullable', 'integer', 'lt:max_height'],
'max_height' => ['nullable', 'integer', 'gt:min_height'],
当其中一个存在但另一个不存在时,这当然会给我错误,因为 lt
/gt
验证规则会针对 null
请求字段进行检查。
我怎样才能让lt
/gt
仅在其他字段存在时才被检查?
有没有办法通过内置验证规则来实现这一点,还是我必须实现自定义验证器?
更新
可能我还不够清楚:我的两个字段都可以为空且彼此独立,所以可以接收min_height
而不是max_height
,反之亦然:这制定了规则喜欢required_with
不适合
对于我的用例。
【问题讨论】:
laravel.com/docs/7.x/validation#rule-required-if 检查这个 @Rafee 你能解释一下吗?我不需要required_if
规则,我的字段是独立的
【参考方案1】:
您可以尝试使用required_with 条件规则。例如你的情况会
'min_height' => 'required_with:max_height|lt:max_height',
'max_height' => 'required_with:min_height|gt:min_height',
【讨论】:
我更新了我的问题以更清楚:required_with
之类的规则不适合我的用例
好的。那么在这种情况下,您可能必须制作自己的自定义 optional_lt 和 optional_gt 验证函数。
这就是我害怕的,但是好吧,我会接受的【参考方案2】:
正如@vinayak-sarawagi 所说,此用例没有内置解决方案,因此必须实施自定义验证规则以在实际比较值之前检查可选的 null 参数。
【讨论】:
【参考方案3】:您可以在第一个参数上使用sometimes
。看一眼:
https://laravel.com/docs/7.x/validation#conditionally-adding-rules
【讨论】:
exclude_if
规则跳过给定字段的整个验证(如果正确),但我想要的是跳过 lt
/gt
规则,保留 @987654326 @一个以上是关于仅当存在目标字段时,Laravel `lt` 和 'gt' 验证规则的主要内容,如果未能解决你的问题,请参考以下文章
仅当一个字段作为数组提供时,Laravel Eloquent 才插入多条记录
仅当rdd的第二个字段中存在时,如何从一个字段rdd中选择值