在Yii
中,当我们使用unique
行为时,实施soft delete
验证的最佳方式是什么?
目前我在模型中使用自定义方法,也许存在另一个简单的解决方案? 下面的代码仍然不完整,更新后仍然会应用验证。
public function checkexists($attribute,$param) {
if(!$this->hasErrors()) // we only want to authenticate when no input errors
{
$username = $this->username;
if($username)
{
$Command = Yii::app()->db->createCommand('SELECT * FROM users WHERE username = :username AND status = true');
$Command->bindParam(":username", $username);
$user = $Command->queryAll();
if (!empty($user))
{
$this->id_user=isset($user[0]['id_user'])?$user[0]['id_user']:'';
$this->addError('username', 'Username exist');
}
}
}
}
答案 0 :(得分:1)
您可以使用yii unique验证器。无需编写额外的验证功能。
使用criteria
获取其他查询条件。
public function rules()
{
$criteria = new CDbCriteria();
$criteria->compare('status', 'true');
return array(
array('username', 'unique', 'criteria'=> $criteria)
);
}
答案 1 :(得分:0)
您必须修复当前使用的自定义验证程序。您还必须从支票中排除当前用户。
$Command = Yii::app()->db->createCommand('SELECT * FROM users WHERE username = :username AND status = true AND id_user <> :id_user');
$Command->bindParam(":username", $username);
$Command->bindParam(":id_user", $this->id_user);
$user = $Command->queryAll();