我有一个用户和帐户模型。关系是用户属于帐户,帐户有很多用户。
以下是两者的型号代码:
用户模型:
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]
属性。所以相反,这种关系似乎有效,只是前进似乎有困难。
答案 0 :(得分:1)
不要在模型中声明与关系同名的变量。
public $account;
将阻止模型查找account
关系,因为在检查同名关系之前,Yii将首先查找(并使用)实际属性。