如何在创建关系时设置主键和外键

时间:2012-05-24 23:21:55

标签: yii

您好我有两个表,并试图在它们之间建立关系。

OH_USERS(表)

user_id(key)

的agent_id user_id(key)

我需要从OH_USERS表中获取代理邮件,但是使用user_id作为密钥,它使用agent_id作为关联两个表的密钥。由于我没有得到正确的结果。是否有任何我们可以明确定义哪个字段用作键或选择保存在数据库中的字段。

3 个答案:

答案 0 :(得分:4)

框架已经有了解决方案。在最新版本中,您可以手动指定您将用于关系的关键字。 As explained in the doc

  

如果您需要指定自定义PK-> FK关联,您可以将其定义为数组('fk'=>'pk')

在您的情况下,它将如下所示:

'user'=>array(self::BELONGS_TO, 'OH_USERS ', array('user_id'=>'user_id')), 

如果不以这种方式建立关系,框架将查找外表的主键,并使用它来进行连接。

答案 1 :(得分:0)

转到代理商模型并相关地定义...

    'user'=>array(self::BELONGS_TO, 'OH_USERS ', 'user_id'), 

//oh_users is your model class name of user and user_id is your foriegn key in agent table..

现在你在你的控制器中使用这样的活动记录..

$agent = Agent::model()->with('user')->find('user_id=:user_id',array('user_id'=>$userid));

现在您可以像这样获取用户的电子邮件......

$agent['user']['email];

它会很好..

答案 2 :(得分:0)

再次阅读你的问题后:

您从'OH_USERS'获取记录,因此您需要在那里定义与代理的关系:

'agent'=>array(self::BELONGS_TO, 'AgentModel', '' , 'on' => 't.user_id = agent.user_id'), 

通过这种方式,您可以告诉用户模型在user_id的基础上与代理模型建立关系,而不是默认的agent_id