Yii2验证规则,用于通过另一个表比较电子邮件并检查插入和更新的唯一性

时间:2019-02-20 06:06:42

标签: yii2

我们的网站上有6种类型的用户,并根据其属性在3个不同的表上进行管理。并且它们都与user表链接在一起,以实现常见的登录目的。我的一个表格有问题,其中有2封电子邮件,例如personalEmailbusinessEmail。我希望这些电子邮件和用户表的电子邮件是唯一的。这样,如果1个用户在用户表中有test@test.com个电子邮件,而他在application表中的记录可以相同,但对于其他用户,模型应显示错误消息。

[
    ['personalEmail', 'businessEmail'], 
    'unique', 
    'targetClass' => '\models\User', 
    'targetAttribute' => 'email', 
    'on'=>'insert,update', 
    'message' => '{attribute}:{value} already exists!'
],

我还希望模型显示有关businessEmail模型中的列application的错误,当前它显示错误是来自用户表的电子邮件。

我希望模型保持电子邮件的唯一性,并且还希望在更新时,跳过对同一记录的检查。

有人可以帮助我吗?

1 个答案:

答案 0 :(得分:0)

您是否希望两个表都有唯一的电子邮件?

您必须在规则中使用条件

[['personalEmail'], 
   'unique', 
   'targetClass' => '\models\User', 
   'targetAttribute' => 'email', 
   'on'=>'insert,update', 
   'whenClient' => "function (attribute, value) { 
       // Here you check by jQuery if businessEmail field is the same personalEmail 
   }"
   'message' => '{attribute}:{value} already exists!'
   ],
['personalEmail','customValidation'] // Custom Validation

在相同模型中:

public function customValidation($attribute){
   // Here you can check your conditions
}

然后您对businessEmail重复类似的规则

注意:我没有测试代码