【问题标题】:How to check unique validation while update in yii2如何在 yii2 中更新时检查唯一验证
【发布时间】:2017-07-25 23:48:35
【问题描述】:

我在 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' => ['email'], 'on'=>array('create','update')],

但是没有发生任何事情,它没有检查更新函数中的唯一规则。

【问题讨论】:

  • targetAttribute如果和勾选的一样就不用加了。为什么你认为它不起作用?
  • 是的,我删除了它仍然无法在更新页面中工作
  • 再次 - 为什么你认为它不起作用?说明您的期望和得到的结果。
  • 现在,如果我在更新它正在插入的任何记录时输入任何现有的电子邮件 ID。但它应该返回“电子邮件 ID 已被占用”的验证消息
  • “任何现有”是指与您尝试更新的不同?

标签: php validation yii2


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    TargetClass 使用帮助模型用户检查数据库中现有的电子邮件

       ['email', 'filter', 'filter' => 'trim'],
        ['email', 'required'],
        ['email', 'email'],
        ['email', 'unique', 'targetClass' => '\app\models\User', 'message' => 'This email address has already been taken.'],
    

    【讨论】:

    • 谢谢兄弟,但更新记录时这不起作用。\
    猜你喜欢
    • 2016-12-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-15
    • 2014-06-28
    • 2018-08-09
    • 2019-02-26
    • 2015-04-24
    相关资源
    最近更新 更多