Yii ActiveRecord使用with()找不到连接记录

时间:2012-11-08 11:20:12

标签: yii

我有两个模型: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文档,似乎一切都应该如此。但它只是拒绝工作!

知道我做错了什么吗?

1 个答案:

答案 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更加容易。