You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel验证规则实现:两字段全为空时报错,单空则另一字段必填

原规则失效原因

required_if的触发前提是「被依赖的字段在请求中存在且等于指定值」,如果两个字段都没有传入请求,两个required_if的触发条件都不满足,自然不会触发必填校验,也就不会返回错误。

正确实现方案

直接使用Laravel内置的required_without验证规则即可,该规则语义为:当指定的其他字段不存在或为空时,当前字段为必填项,完全匹配你的需求。
规则写法如下:

$rules = [
    'inventory_storage_container_id' => 'required_without:inventory_storage_space_id|integer|exists:inventory_storage_containers,id',
    'inventory_storage_space_id' => 'required_without:inventory_storage_container_id|integer|exists:inventory_storage_spaces,id',
];
规则校验效果
  • 仅传入inventory_storage_container_id:inventory_storage_space_id的required_without条件不满足,验证通过
  • 仅传入inventory_storage_space_id:inventory_storage_container_id的required_without条件不满足,验证通过
  • 同时传入两个字段:两个规则都不触发,验证通过
  • 两个字段都未传入/都为空:两个字段的required_without条件同时触发,返回必填错误,符合预期

如果需要自定义错误提示,可以参考如下写法:

$messages = [
    'inventory_storage_container_id.required_without' => '未选择存储位时必须选择存储容器',
    'inventory_storage_space_id.required_without' => '未选择存储容器时必须选择存储位',
];

// 验证调用示例
$validator = Validator::make($request->all(), $rules, $messages);

内容的提问来源于stack exchange,提问作者Majid Javaid

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 13:06:03