1

在,当我们使用行为时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');
                }
            }   
        }
    }
4

2 回答 2

1

您可以为此使用 yii唯一验证器。无需编写额外的验证函数。

用于criteria附加查询条件。

public function rules()
{
    $criteria = new CDbCriteria();
    $criteria->compare('status', 'true');
    return array(
        array('username', 'unique', 'criteria'=> $criteria)
    );
}
于 2014-04-17T05:42:50.030 回答
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();
于 2013-04-30T15:10:59.497 回答