当我们使用软删除行为时如何实现唯一验证?

时间:2013-04-30 11:44:25

标签: php yii

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');
                }
            }   
        }
    }

2 个答案:

答案 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();