如何在yii2中更新时检查唯一验证

时间:2017-03-06 07:38:47

标签: php validation yii2

我在yii2项目中工作。我有用户模型,因为电子邮件ID应该是唯一的。添加功能它正在工作。但是当我更新记录时,它不会检查唯一的验证。

以下是我的用户型号代码:

public function rules() {
        return [
            [['first_name', 'last_name', 'address', 'mobile', 'email', 'password_hash', 'role_id'], 'required'],
            [['address'], 'string'],
            [['role_id'], 'integer'],
            [['email'], 'email'],
            [['email'], 'unique', 'targetAttribute' => ['email']],
            [['created_at', 'updated_at'], 'safe'],
            [['first_name', 'last_name', 'email', 'password_hash'], 'string', 'max' => 255],
            [['mobile'], 'required','on'=>'create,update'],
            //[['mobile'], 'string','max'=>10],
            [['mobile'], 'number','numberPattern' => '/^[0-9]{10}$/','message'=>"Mobile must be integer and should not greater then 10 digit"],
            [['password_hash'],'string','min'=>6],
            //[['mobile'], 'number'],
            [['status'], 'string', 'max' => 1,'on'=>'create,update'],
            [['role_id'], 'exist', 'skipOnError' => true, 'targetClass' => Roles::className(), 'targetAttribute' => ['role_id' => 'id']],
        ];
    }
  

即使我尝试过:[[' email'],' unique',' targetAttribute' =>   ['电子邮件'],' on' =>数组('创建','更新')],

但是没有任何事情发生在更新功能中没有检查唯一规则。

2 个答案:

答案 0 :(得分:0)

如果检查列相同,请尝试使用

[['email'], 'unique'],

答案 1 :(得分:0)

TargetClass使用帮助模型用户

检查数据库中的现有电子邮件
   ['email', 'filter', 'filter' => 'trim'],
    ['email', 'required'],
    ['email', 'email'],
    ['email', 'unique', 'targetClass' => '\app\models\User', 'message' => 'This email address has already been taken.'],