如何在from字段为空/不存在时实现to字段的大于验证?
解决Laravel中from为null时to的比较验证问题
你的问题出在gt:from规则会在from为null时依然执行,导致无效的数值比较报错。要实现仅当from存在且不为null时,才验证to大于from,可以用Laravel的条件验证规则来处理,具体有两种常用方案:
方案一:使用Rule::sometimes动态触发规则
通过sometimes规则,仅在from不为null时启用gt:from验证:
use Illuminate\Validation\Rule; // 验证规则数组 $rules = [ 'from' => ['nullable', 'decimal', 'required_without:to'], 'to' => [ 'nullable', 'decimal', 'required_without:from', Rule::sometimes('gt:from', function ($input) { // 仅当from不为null时,应用gt:from规则 return !is_null($input->from); }) ], ];
方案二:动态追加规则
如果不想引入Rule类,也可以通过判断请求中from的存在性来动态添加规则:
$rules = [ 'from' => ['nullable', 'decimal', 'required_without:to'], 'to' => ['nullable', 'decimal', 'required_without:from'], ]; // 如果from不为null,给to追加gt:from规则 if (!is_null(request()->input('from'))) { $rules['to'][] = 'gt:from'; }
这两种方案都能满足需求:两个字段至少填一个,当同时填写时to必须大于from,当from为null时跳过比较验证,避免报错。
内容的提问来源于stack exchange,提问作者kicaj
相关产品推荐
相关产品推荐

