2013-07-24 3 views
0

Мне нужно переместить таблицу в другую базу данных.Использование Cakephp принадлежит нескольким базам данных

Если я это сделаю, все отношения HABTM прекрасно работают с помощью обучающих программ, таких как this.

Однако в других моделях есть атрибуты to и hasMany, которые, кажется, пропускаются во время функции find().

Я обнаружил, что:

if databases for model is different the join build is bypassed. in source_dbo

Есть ли гладко обходной путь, не углубляясь в код?

Таблица: А, В на DB1 таблица: C на DB2

стол: belongsTo С Таблицы: В HABTM С

Созданием находки() на модель А, возвращают только данные из таблицы A. На модели B find() возвращает все объединенные данные из таблиц B и C.

ответ

0

Не знаете, почему это отключено/ограничено по умолчанию (надеюсь, вы узнаете, как я продолжаю развивать этот продукт), но после борьбы с это часами, я решил пообщаться с/lib /cake/Model/DataSource/DboSoure.php Класс и удалить ограничение.

//<-- commented out line 1064 
//if ($model->useDbConfig === $linkModel->useDbConfig) { 

    if ($bypass) { 
      $assocData['fields'] = false; 
    } 
    if ($this->generateAssociationQuery($model, $linkModel, $type, $assoc, $assocData, $queryData, $external, $null) === true) { 
      $linkedModels[$type . '/' . $assoc] = true; 
    } 

//} <-- commented out line 1071 

После этого все работало нормально для отношений $ belongsTo.

+0

Один неожиданный побочный эффект, который я только заметил, заключается в том, что при возврате полей для поиска («все») торт по умолчанию будет использовать основную модель, с которой вы запрашиваете для псевдонима вместо разумного определения псевдонима, основанного на имена полей. , например. Вы запрашиваете с моделью ** Комментарий ** в DB1, $ принадлежит модели ** Пользователь ** в DB2. Если вы укажете поля как 'array ('first_name', 'title')' cake возвращает ** 'array ('Comment.first_name', 'Comment.title')' ** вместо ** 'array ('User.first_name', 'Comment.title') '** Я могу жить с указанием имен модели явно на данный момент. – Francis

Смежные вопросы