繁体   English   中英

CakePHP:使用不同的数据库关联两个模型?

[英]CakePHP: associating two models using different databases?

我有两个模型,Plant和Emp,它们具有Has And Belongs To Many关系。 我已经将它们配置为关联,并且获取每个数据的查询是正确的,但问题是Plant和Emp在不同的数据库上。 Emp位于数据库1上,Plant位于数据库2上。因此,它们不会正确查询连接表; 连接表仅在数据库1上。

当Plant模型尝试访问连接表时,它将查询没有此数据的数据库2。

这是Emp为Plant提供的协会。

var $hasAndBelongsToMany = array(
    'Plant' =>
        array(
            'className'              => 'Plant',
            'joinTable'              => 'emp_plant',
            'foreignKey'             => 'employee_id',
            'associationForeignKey'  => 'LocationID',
            'unique'                 => true,
            'conditions'             => '',
)
);

更新 :我试图设置一个“finderQuery”属性让我查询连接表,但我不知道如何给出这样的原始SQL查询,并允许它动态地使用模型实例的id而不是预定义的值。

我可以设置类似的东西

SELECT * FROM [Plant] AS [Plant] JOIN [DB].[DBO].[empplant] AS 
[EmpPlant] ON ([EmpPlant].[employee_id] = **4** 
AND [EmpPlant].[ID] = [Plant].[LocationID]) 

这将为我提供一个员工的正确数据,但我不知道如何使这个finderQuery成为动态查询。 必须有一种方法可以实现这一点。

尝试

var $useDbConfig = 'alternate';

在您的模型类中。

我需要使用自定义finderQuery并使用特殊的{$__cakeID__$}标识符代替匹配的模型ID。 这是上面示例的固定版本,在$hasAndBelongsToMany数组的关系条目中设置为finder查询。

'finderQuery'=>'SELECT * FROM [Plant] AS [Plant] JOIN [DB].[DBO].[empplant] AS 
[EmpPlant] ON ([EmpPlant].[employee_id] = {$__cakeID__$} 
AND [EmpPlant].[ID] = [Plant].[LocationID])' 

这有效,但如果有人知道如何修复这种情况没有自定义查找器查询(我试图通过使用关联避免),请发布一个答案,我将标记为正确。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM