yii Active Record更改模型实例(如果存在)

时间:2014-06-01 15:20:34

标签: php oop yii

最近我遇到了有趣的情况。 我有2个模型:帐户(ID,用户名,密码)和帖子(id,account_id,title,...) 我通过wiki创建了表单。一切正常。但我的问题是帐户 - >用户名必须是唯一的))) 所以,我决定将验证规则添加到模型账户:

public function rules()
{
    // NOTE: you should only define rules for those attributes that
    // will receive user inputs.
    return array(
        ---
        array('username', 'checkForUnique'),
        ---
    );
}

public function checkForUnique($attribute, $params)
{
    $model = $this->findByAttributes(array("username" => $this->$attribute));
    if ($model) {
        // I do not know what to do
    }
}

我的问题是: 如何检查用户名和用户名是否已存在,将模型帐户的实例更改为$ model

1 个答案:

答案 0 :(得分:1)

对于验证唯一值,您可以添加以下规则:

public function rules()
{
   return array(
      ...
      array('username', 'unique'),
      ...
   );
}

你应该在控制器中检查模型,如果已经存在具有相同用户名的模型而不是使用它,如果不存在 - 则使用新实例:

你的控制器:

...
    $model = $this->findByAttributes(array("username" => $_POST["Account"]["username"]));
    if(is_null($model)){
        $model = new Account();
    }
...

然后在$ model中填入数据,验证并保存。