您好,我有两个表并试图在它们之间建立关系。
OH_USERS(表)
user_id(键)
代理
agent_id user_id (key)
我需要从 OH_USERS 表中获取代理电子邮件,但使用 user_id 作为键,它使用 agent_id 作为关联两个表的键。因此,我没有得到正确的结果。有没有什么地方我们可以专门定义将哪个字段用作键或选择它保存在数据库中的任何字段。
您好,我有两个表并试图在它们之间建立关系。
OH_USERS(表)
user_id(键)
代理
agent_id user_id (key)
我需要从 OH_USERS 表中获取代理电子邮件,但使用 user_id 作为键,它使用 agent_id 作为关联两个表的键。因此,我没有得到正确的结果。有没有什么地方我们可以专门定义将哪个字段用作键或选择它保存在数据库中的任何字段。
该框架已经为此提供了解决方案。在最新版本中,您可以手动指定要用于关系的密钥是什么。如文档中所述:
如果您需要指定自定义 PK->FK 关联,您可以将其定义为 array('fk'=>'pk')
在您的情况下,它将如下所示:
'user'=>array(self::BELONGS_TO, 'OH_USERS ', array('user_id'=>'user_id')),
如果你不以这种方式建立关系,框架会寻找外表的主键,并用它来做连接。
再次阅读您的问题后:
您正在从“OH_USERS”获取记录,因此您需要在此处定义与代理的关系:
'agent'=>array(self::BELONGS_TO, 'AgentModel', '' , 'on' => 't.user_id = agent.user_id'),
这样你就告诉用户模型根据 user_id 而不是默认的 agent_id 与代理模型建立关系
转到代理模型并定义相关...
'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];
它会很好用..