Yii2 忽略对软删除模型的验证
我有Yii2 忽略对软删除模型的验证,yii2,Yii2,我有user表。我创建了一个包含3个字段的表单: 用户名 电话号码 地位 前两个字段是唯一的。这些字段的模型规则如下所示: [['Username', 'phonenumber'], 'required'], [['Username', 'phonenumber'], 'unique'], 我使用软删除,所以当记录被删除时,它实际上保留在数据库中,但状态值将更改为0 问题是,如果我使用现有用户名添加记录,它会显示一条错误消息,如“已添加”。如果用户名的状态值为0我需要忽略验证,请使用Uni
user
表。我创建了一个包含3个字段的表单:
- 用户名
- 电话号码
- 地位
[['Username', 'phonenumber'], 'required'],
[['Username', 'phonenumber'], 'unique'],
我使用软删除,所以当记录被删除时,它实际上保留在数据库中,但状态值将更改为0
问题是,如果我使用现有用户名添加记录,它会显示一条错误消息,如“已添加”。如果
用户名
的状态值为0
我需要忽略验证,请使用UniqueValidator的过滤器
属性
public function rules()
{
return [
...
['username', 'unique', 'filter' => ['<>', 'status', 0]];
...
];
}
公共功能规则()
{
返回[
...
['username','unique','filter'=>[''status',0]];
...
];
}
最好声明常量,而不是0
(类似于const STATUS\u DELETED=0
),并将其作为self::STATUS\u DELETED
在user
类中使用。您也可以使用=代码>而不是
最后一个建议是使用username
而不是username
来遵循命名数据库表列的约定
阅读更多有关中声明过滤器的方法的信息
将过滤器设置为数组的方法如下所述。您可以使用自己的函数来确定给定用户名是否已处于活动状态。在唯一验证规则的“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],
}
wat是在筛选器数组中的使用,它表示不等于。感谢您的评论,在回答中提供了有关在筛选器中指定数组的信息。“最后一个建议是使用用户名”-您是指“用户名”吗?是的,但是当专门属性正好存在时,它就没有意义了。另外,您的代码是针对Yii1的。是的,您是对的“过滤器”提供了确切的功能,因此无需生成函数。Thnks