2011-10-11 74 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