2011-09-02 96 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

這兩個模型都有正確的數據庫配置,我已經更新了我的問題 –