我有两个模型,Plant和Emp,它们具有Has To Beongs 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成为动态查询。必须有一种方法可以实现这一点。
答案 0 :(得分:0)
尝试
var $useDbConfig = 'alternate';
在您的模型类中。
答案 1 :(得分:0)
我需要使用自定义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])'
这有效,但如果有人知道如何解决这种情况没有自定义查找器查询(我尝试以避免使用关联)请发布答案我将标记为正确。