2011-10-11 64 views
3

早上好,笨DataMapper的跨數據庫

我目前的工作,利用笨和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') 
    ) 

} 

的問題

當我嘗試使用$事件 - > 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實際上是否支持跨數據庫連接?如果沒有,我有什麼辦法可以實現這個目標?

+0

我有同樣的問題。我早前就此發佈了一個[問題](http://stackoverflow.com/questions/16171576/joining-tables-in-different-databases-with-the-ci-datamapper-orm)。我看了一下datamapper庫,看起來他們不檢查相關表是否在另一個數據庫中。你是如何解決這個問題的? – Brainfeeder

回答

1

你不能跨數據庫做到這一點,你甚至可以從你的SQL看到它正試圖查詢1個單數據庫(缺乏。記號數據庫的偶數)。我假設你的數據庫都在同一臺服務器上?在這種情況下,您可以嘗試編寫自定義SQL查詢(不確定您的數據庫),但在查詢中定義database.table關係,並嘗試使用簡單的語句。

否則,您將需要通過對象/數組/等等以編程方式解決這個難題;

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