Yii - Belongs_To正在工作,现在抛出错误

时间:2012-11-05 18:51:26

标签: php orm yii

我有一个用户和帐户模型。关系是用户属于帐户,帐户有很多用户。

以下是两者的型号代码:

用户模型

public function relations()
{
    // NOTE: you may need to adjust the relation name and the related
    // class name for the relations automatically generated below.
    return array(
        'account' => array(self::BELONGS_TO, 'Account', 'account_id'),
    );
}

帐户模型

public function relations()
{
    // NOTE: you may need to adjust the relation name and the related
    // class name for the relations automatically generated below.
    return array(
        'users' => array(self::HAS_MANY, 'User', 'account_id'),
                    'userCount'=>array(self::STAT,'User','account_id'),
            );
}

我的 UserIdentity.php 中包含此代码,用于登录WAS正常工作:

public function authenticate()
{
    $user=User::model()->findByAttributes(array('username'=>$this->username));
    if($user===null)
        $this->errorCode=self::ERROR_USERNAME_INVALID;
    else{
                if($user->password!==$user->encrypt($this->password))
                    $this->errorCode=self::ERROR_PASSWORD_INVALID;
                else{
                    $this->_id=$user->id;
                    if($user->last_login_time==null)
                        $lastLogin=time();
                    else
                        $lastLogin=strtotime($user->last_login_time);
                    $this->setState('lastLoginTime', $lastLogin);
                    $this->setState('account',array('id'=>$user->account->id,'name'=>$user->account->name,));
                    $this->errorCode=self::ERROR_NONE;
                }
            }
    return !$this->errorCode;
}

当我向帐户添加其他用户时,它开始出错:

PHP注意:尝试获取非对象的属性

错误指向

$this->setState('account',array('id'=>$user->account->id,'name'=>$user->account->name,));

分成多行时:

'id'=>$user->account->id,是错误的所在。

要解决此问题,我只需将其更改为:

$account=Account::model()->findByPk($user->account_id);
$this->setState('account',array('id'=>$account->id,'name'=>$account->name,));

所以当我有一个用户时,这种关系工作得很好,但当我有2个用户时,这种关系失败了。我可以继续使用上面的Yii,但我确实喜欢直接访问对象的简单性。我没有正确建立关系吗?为什么现在这个帐户中的2个用户无法正常工作?

修改

var_dump($user) - http://pastebin.com/TEyrFnme

同样有趣的是,我可以使用$users=$account->users;从该帐户访问该用户并访问所有$user[0]属性。所以相反,这种关系似乎有效,只是前进似乎有困难。

1 个答案:

答案 0 :(得分:1)

不要在模型中声明与关系同名的变量。

public $account;

将阻止模型查找account关系,因为在检查同名关系之前,Yii将首先查找(并使用)实际属性。