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

Yii 如何在创建关系时设置主键和外键,yii,Yii,您好,我有两个表,正在尝试在它们之间创建关系 OH_用户(表) 用户id(密钥) 代理人 代理id 用户id(密钥) 我需要从OH_USERS表中获取代理电子邮件,但它不使用user_id作为键,而是使用代理id作为键来关联两个表。因此我没有得到正确的结果。是否有任何地方可以明确定义要用作键的字段或其选择项(无论其保存在数据库中)。转到代理模型并定义与此相关的内容 'user'=>array(self::BELONGS_TO, 'OH_USERS ', 'user_id'),

您好,我有两个表,正在尝试在它们之间创建关系

OH_用户(表)

用户id(密钥)

代理人

代理id 用户id(密钥)


我需要从OH_USERS表中获取代理电子邮件,但它不使用user_id作为键,而是使用代理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];

它将很好地工作。

转到代理模型并定义与此相关的

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

在再次阅读您的问题后,它将很好地工作。

您正在从“OH_用户”获取记录,因此需要在此处定义与代理的关系:

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

这样,在再次阅读您的问题后,您告诉用户模型基于用户id而不是默认代理id与代理模型建立关系:

您正在从“OH_用户”获取记录,因此需要在此处定义与代理的关系:

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

通过这种方式,您告诉用户模型基于用户id而不是默认代理id与代理模型建立关系。框架已经有了解决方案。在最新版本中,您可以手动指定要用于关系的键:

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

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

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

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

框架已经有了解决方案。在最新版本中,您可以手动指定要用于关系的键:

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

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

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

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

谢谢。这帮了我的忙。但是你的意思是不是
array('user\u id'=>'user\u id')
?@sucotronic,你是冠军!感谢这修复了我的问题,我还必须使用非主键值作为相关表的外键。谢谢。这帮了我的忙。但是你的意思是不是
array('user\u id'=>'user\u id')
?@sucotronic,你是冠军!谢谢,这解决了我的问题,我还必须使用非主键值作为相关表的外键。@sucotronic如果这对您有效,请接受答案好吗?@sucotronic没问题。不管是谁给出的,你仍然会接受你最好的答案,这样其他访客也能得到好处。@sucotronic如果这对你有效,你会接受答案吗?@sucotronic没问题。不管是谁给出的,你仍然会接受你最好的答案,这样其他访客也能从中受益。