仅当存在目标字段时,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_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 而不是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_ltoptional_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 才插入多条记录

仅当 Laravel 接受确认时才关闭模式

仅当rdd的第二个字段中存在时,如何从一个字段rdd中选择值

仅当其他 simple_form 字段等于某个输入时才验证存在?

仅当记录不存在时才将 SQL 插入表中[重复]

MySQL-如果与另一行相似,则从TEXT字段中删除行