2012-05-24 139 views
1

你好我有两个表,并试图创建它们之间的关系。如何在创建关系时设置主键和外键

OH_USERS(表)

USER_ID(键)

代理

AGENT_ID USER_ID(键)

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

回答

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]; 

它会工作好..

0

再次阅读您的问题后:

你是从“OH_USERS”获取记录,所以你需要定义与代理商有关系:

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

这样,你是在告诉用户模型进行的关系代理模型基于user_id而不是默认agent_id

+1

@sucotronic如果这对你有用,你会接受答案吗? – Arfeen

+0

ooops,我发表评论的错误答案,对不起:P – sucotronic

+0

@sucotronic没问题。无论谁给予,仍然接受你的最佳答案,所以其他参观者也可以得到好处。 – Arfeen

4

该框架已经为此提供了解决方案。在最新版本中,您可以手动指定您要用于关系的关键。 As explained in the doc

如果你需要指定自定义PK-> FK关联,你可以把它定义为数组(“FK” =>“PK”)

在你的情况下,它会看起来像以下内容:

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

如果不stablish关系这种方式,框架会查找外部表的主键,并用它做加盟。

+0

谢谢。这帮了我。但是,你是不是指'array('user_id'=>'user_id')'? – regularmike

+0

你是对的@regularmike我修复了代码。谢谢 – sucotronic

+0

@sucotronic,你是冠军!谢谢你解决了我的问题,我也必须使用非主键值作为相关表的外键。 – Vicer