ユーザーとアカウントのモデルがあります。関係は、ユーザーはアカウントに属し、アカウントには多くのユーザーがいます。
両方のモデルコードは次のとおりです。
ユーザーモデル:
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に、ログイン用の次のコードがあります。このコードは正常に機能していました。
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,));
したがって、ユーザーが1人の場合、関係は正常に機能しましたが、ユーザーが2人の場合、関係は失敗します。上記のようにYiiを使い続けることができますが、オブジェクトに直接アクセスするという単純さが好きでした。関係を正しく設定しませんでしたか?1つのアカウントに2人のユーザーがいる場合、これが機能しないのはなぜですか?
編集:
var_dump($user)
-http ://pastebin.com/TEyrFnme
また、次を使用してアカウントからユーザーにアクセスできることも興味深いです。$users=$account->users;
そして、すべての$user[0]
属性に問題なくアクセスできます。逆に言えば、関係はうまくいっているようで、前進するだけでは難しいようです。