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

Laravel验证:仅两字段都提供时校验相等性的问题

Laravel表单验证:仅当两字段都存在时校验值相等

你的问题出在sometimes规则仅控制当前字段的规则是否生效,但same规则本身要求被对比的字段必须存在且值相等。当你只传其中一个字段时,same规则会因为对比字段不存在而触发错误,这不符合你的需求。

解决方案一:使用条件验证(推荐)

通过sometimes的闭包形式,仅当两个字段都存在时才应用same校验规则:

$validator = Validator::make($inputFields, [
    'brandIdOnline' => 'uuid|sometimes',
    'brandIdOffline' => 'uuid|sometimes',
]);

// 当两个字段同时存在时,校验值相等
$validator->sometimes('brandIdOnline', 'same:brandIdOffline', function ($input) {
    return isset($input['brandIdOnline']) && isset($input['brandIdOffline']);
});

$validator->sometimes('brandIdOffline', 'same:brandIdOnline', function ($input) {
    return isset($input['brandIdOnline']) && isset($input['brandIdOffline']);
});

解决方案二:调整规则组合

利用required_with和same的组合,确保只有当两个字段同时存在时才触发相等校验:

$validator = Validator::make($inputFields, [
    'brandIdOnline' => 'uuid|sometimes|required_with:brandIdOffline|same:brandIdOffline',
    'brandIdOffline' => 'uuid|sometimes|required_with:brandIdOnline|same:brandIdOnline',
]);

这里required_with的作用是:当另一个字段存在时,当前字段必须存在(已满足,因为两个都传了),此时same规则会校验值是否相等;如果只传其中一个字段,required_with不生效,same规则也不会触发校验。

内容的提问来源于stack exchange,提问作者Fabrice Lefloch

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 05:30:54