簡體   English   中英

Codeigniter Datamapper跨數據庫連接

[英]Codeigniter Datamapper Cross-Database Joins

早上好,

我目前正在開發一個利用Codeigniter和Datamapper Library(http://datamapper.wanwizard.eu)的項目。 該項目使用一個用於數據的中央數據庫(稱為“base”)和一個用於應用程序數據的單獨數據庫(“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是否實際支持跨數據庫連接。 如果沒有,有什么辦法可以實現這個目標嗎?

您不能跨數據庫執行此操作,您甚至可以從SQL中看到它正在嘗試查詢單個數據庫(缺少。表示數據庫甚至)。 我假設你的數據庫都在同一台服務器上? 在這種情況下,您可以嘗試編寫自定義SQL查詢(不確定在您的數據庫上),但在查詢中定義database.table關系,並嘗試使用簡單的語句。

否則你需要通過objects / arrays / etc以編程方式解決這個難題;

參考文獻:
http://nathan.rambeck.org/blog/2-joining-mysql-tables-across-multiple-databases

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM