[英]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.