Codeigniter Datamapper кросс-базы данных соединения - PullRequest
4 голосов
/ 11 октября 2011

Доброе утро,

В настоящее время я работаю над проектом, который использует Codeigniter и библиотеку Datamapper (http://datamapper.wanwizard.eu).). В проекте используется центральная база данных для пользовательских данных (называемая «база») и отдельная база данных для данных приложения («crm»). Это сделано для того, чтобы в будущем мы могли создавать другие приложения, использующие каталог пользователя, без привязки к одному серверу.

У меня проблема в том, что мне нужно использовать встроенные отношения Datamapper, но для двух баз данных. Вот мои настройки:

Модель лица

class person extends DataMapper {

    var $db_params = 'base';
    var $prefix = 'base_';

    var $has_many = array(
        'initiated_event' => array('class' => 'event','other_field' => 'initiator')
    )

}

Модель события

class event extends DataMapper {

    var $db_params = 'crm';
    var $prefix = 'crm_';

    var $has_one = array(
        'initiator' => array('class' => 'person','other_field' => 'initiated_event')
    )

}

Проблема

Когда я пытаюсь использовать $ events-> initiator-> get () , я получаю следующую ошибку:

Error Number: 1146
Table 'circle_base.crm_events' doesn't exist
SELECT `base_persons`.* FROM (`base_persons`) LEFT OUTER JOIN `crm_events` initiated_event_crm_events ON `base_persons`.`id` = `initiated_event_crm_events`.`initiator_id` WHERE `initiated_event_crm_events`.`id` = 1
Filename: C:\xampp\htdocs\circle\crm\system\database\DB_driver.php
Line Number: 330

Может ли кто-нибудь пролить свет на этот вопрос? Поддерживает ли DataMapper соединения между базами данных? Если нет, то есть ли способ, которым я могу этого достичь?

1 Ответ

1 голос
/ 11 октября 2011

Вы не можете сделать это в разных базах данных, вы даже можете увидеть из своего SQL, что он пытается запросить одну единственную базу данных (даже отсутствие нотации для базы данных). Я предполагаю, что обе ваши базы данных находятся на одном сервере? В этом случае вы можете попробовать написать собственный SQL-запрос (не уверен в ваших БД), но в запросе определите отношение database.table и попробуйте с простым оператором.

В противном случае вам нужно будет решить эту головоломку программно с помощью объектов / массивов / etc;

Ссылки:
http://nathan.rambeck.org/blog/2-joining-mysql-tables-across-multiple-databases

...