CakePHP: связать две модели с использованием разных баз данных? - PullRequest
3 голосов
/ 02 сентября 2011

У меня есть две модели, Plant и Emp, у которых есть отношение "Имеет и принадлежит многим".Я настроил их для связывания, и запрос на получение данных для каждого из них верный, но проблема в том, что 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-запрос, подобный этому, и позволить ему динамически использовать идентификатор для экземпляра Модели вместо предопределенного значения.

Я могу установить что-токак

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

Что даст мне правильные данные для одного сотрудника, но я не знаю, как сделать этот искатель запросов динамическим запросом.Должен быть способ, чтобы это сработало.

Ответы [ 2 ]

0 голосов
/ 03 сентября 2011

Мне нужно было использовать пользовательский finderQuery и использовать специальный идентификатор {$__cakeID__$} вместо сопоставляемого идентификатора модели. Это фиксированная версия примера выше, установленная в качестве запроса поиска в записи отношения для массива $hasAndBelongsToMany.

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

Это работает, но если кто-нибудь знает, как исправить эту ситуацию без пользовательского поискового запроса (что я пытался избежать, используя ассоциации), пожалуйста, напишите ответ, и я отмечу это вместо этого.

0 голосов
/ 03 сентября 2011

Попробуйте

var $useDbConfig = 'alternate';

в вашем классе моделей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...