我有两个模型:User和UserProfile
在User模型中,我定义了以下关系:
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(
'userProfile' => array(self::HAS_ONE, 'UserProfile', 'user_id'),
);
}
在UserProfile中,我定义了这个关系:
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(
'user' => array(self::BELONGS_TO, 'User', 'user_id'),
);
}
现在,当我在控制器中运行以下代码时:
$user = User::model()->with('userProfile')->findByPK($userId);
$userProfile = $user->userProfile;
print_r($userProfile);
$ userProfile变量为null。我已经检查并仔细检查了数据库和代码,我也重新阅读了Yii文档,似乎一切都应该如此。但它只是拒绝工作!
知道我做错了什么吗?
答案 0 :(得分:1)
一般来说,你不能这样:
'userProfile' => array(self::HAS_ONE, 'UserProfile', 'user_id'),
和此:
'user' => array(self::BELONGS_TO, 'User', 'user_id'),
除非两个表都有user_id键作为主键,否则都使用user_id键。更有可能的是,你所追求的是这样,就像你有:
'userProfile' => array(self::HAS_ONE, 'UserProfile', 'user_id'),
但是这等同于SQL语句:
user.id = userProfile.user_id
如果那不是您想要的,那么您需要相应调整。解决这个问题最有用的方法之一就是打开SQL语句的基本日志记录或使用Yii debug toolbar使得查看正在运行的SQL与您认为运行的SQL更加容易。