尝试通过buildRules实现条件验证逻辑。逻辑在add上有效,但在update操作上无效。我已经验证了该规则在update时返回true,在add时返回false。
我的表模型:
第一个
我试过了
public function buildRules(RulesChecker $rules): RulesChecker {
$rules->add(function ($entity, $options) use($rules) {
if ($entity->send_email == 'Y') {
$rules->add($rules->isUnique(
['email'], 'Error Message'
));
return $rules;
}
return true;
}, 'email');
return $rules;
}
在编辑时显示来自控制器的flash消息。但在添加时不显示任何消息,并停留在编辑窗体上。
任何建议或教育指针将不胜感激。抱歉,如果这是不正确的格式
更新日期:| 名称名称名称|型号|排序规则||- --|- --|- ---||电子邮件|瓦查尔(255)|utf8_通用_ci||发送电子邮件(_E)|varchar(1)|utf8_通用_ci|
目的是如果电子邮件已经存在并且send_email flag ==“Y”,则不允许更新或添加到数据库。只要send_email flag ==“N”,则电子邮件多次存在是有效的。返回true是在唯一检查中生成的。
$rule = $rules->isUnique(['email'], 'The email should be unique for MailChimp'); // Works on add only
Debugger::dump($rule($entity, $options));
return $rule($entity, $options);
1条答案
按热度按时间bxjv4tth1#
如果我没有理解错的话,那么在规则中简单地包含
send_email
字段就可以达到您的目的,即:这样,查找条件将如下所示:
因此,如果已经存在具有
email
和send_email
组合的记录,则该规则将失败。您正在编辑的记录仍将被排除,但这不会是问题,因为它只影响可能已经存在的具有该数据的其他记录。