2011-09-02 102 views
2

我有两个模型,植物和雇主,有一个有和属于多关系。我已经将它们配置为关联,并且为每个数据获取数据的查询都是正确的,但问题在于Plant和Emp位于不同的数据库中。 Emp在数据库1上,工厂在数据库2上。因此,他们不会正确查询连接表;连接表仅在数据库1上。CakePHP:使用不同的数据库关联两个模型?

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

这是协会雇用的工厂。

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动态查询。必须有一种方法才能发挥作用。

回答

0

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

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

这工作,但如果有人知道如何解决这种情况没有一个自定义查找查询(我是试图避免使用协会)请张贴的答案,我将标志着正确来代替。

0

尝试

var $useDbConfig = 'alternate'; 

在你的模型类。

+0

这两个模型都有正确的数据库配置,我已经更新了我的问题 –