忽略对软删除模型的验证

Jee*_*kha 4 yii2

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

  • 用户名
  • 电话号码
  • 地位

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

[['Username', 'phonenumber'], 'required'],
[['Username', 'phonenumber'], 'unique'],
Run Code Online (Sandbox Code Playgroud)

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

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

aro*_*hev 5

使用filter属性UniqueValidator

public function rules()
{
    return [
        ...

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

        ...
    ];
}
Run Code Online (Sandbox Code Playgroud)

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

最后的建议是使用username而不是Username遵循命名数据库表列的约定。

阅读更多关于filter官方文档中声明的方式。

这里filter描述了将条件设置为数组的方法。