忽略软删除模型的验证

时间:2015-08-17 10:18:16

标签: yii2

我有user表。我创建了一个包含3个字段的表单:

  • 用户名
  • PHONENUMBER
  • 状态

前两个字段是唯一的。这些字段的模型规则如下所示:

[['Username', 'phonenumber'], 'required'],
[['Username', 'phonenumber'], 'unique'],

我使用软删除,因此当删除记录时,它实际上会保留在数据库中,但状态值将更改为0

问题是,如果我添加一个包含现有用户名的记录,它会显示一条错误消息,例如“已添加”。如果username的状态值为0,我需要忽略验证。

2 个答案:

答案 0 :(得分:4)

使用filter

UniqueValidator属性
public function rules()
{
    return [
        ...

        ['username', 'unique', 'filter' => ['<>', 'status', 0]];

        ...
    ];
}

最好在0类中声明常量而不是const STATUS_DELETED = 0(类似self::STATUS_DELETED)并将其用作User。您也可以使用!=代替<>

最后一条建议是使用username代替Username来遵循命名数据库表列的惯例。

详细了解official docs中声明filter的方法。

filter条件设置为数组的方式为here

答案 1 :(得分:-1)

您可以使用自己的函数来确定已存在的用户名是否处于活动状态。在唯一验证规则的“when”属性中使用此函数。

看看:

public function rules()
{
    $check = function($model) { 
    $existActiveUser = User::model()->findByAttributes(array("username"=>$model->username,"status"=>1));
    if($existActiveUser)
        return true;
    else
        return false;
};
return [
    ['Username', 'phonenumber'], 'required'],
    [['Username','phonenumber'],'unique','when'=>$check],
}