required_with 和 required_with_all 不会按照您解释它们的方式工作。 required_with_all 表示如果以下所有字段都有值,则此字段是必需的。例如,required_with_all:address,state,zip 表示“如果 address 和 state 和 zip 都有值,则需要城市”。
你正在努力实现:
- 如果
address 有值,则city、state 和zip 是必需的
- 如果
address2 有值,则需要address
- 如果
city 有值,则需要address、state 和zip
- 如果
state 有值,则address、city 和zip 是必需的
- 如果
zip 有值,则需要address、city 和state
您正在寻找的规则是 required_with,但逻辑不同。您可以通过锚定一个字段来有效地使用required_with 规则,例如:锚定address 并且您的英文规则可以是“如果address 具有值,则需要城市、州和邮政编码,或者如果@ 987654347@、state 或 zip 有一个值,则需要 address”,可以构造为:
$this->validate($request, [
'address' => 'required_with:city,state,zip|string|nullable',
'city' => 'required_with:address|string|nullable',
'state' => 'required_with:address|string|size:2|nullable',
'zip' => 'required_with:address|integer|digits:5|nullable'
]);
对于address2,您的规则是“如果address2 具有值,则需要address”(这将级联导致state、city 和zip 也需要)。这再次使用required_with 构造,我们在address 上设置required_with:
$this->validate($request, [
'address' => 'required_with:city,state,zip,address2|string|nullable',
'address2' => 'string|nullable',
'city' => 'required_with:address|string|nullable',
'state' => 'required_with:address|string|size:2|nullable',
'zip' => 'required_with:address|integer|digits:5|nullable'
]);
编辑:此答案的先前版本存在错误,现已修复。