1

我有一个与两个不同数据库对话的应用程序。对于我的一个实体,School我收到以下错误:

SQLSTATE[42S02]: Base table or view not found: 1146 Table 'pressbox.schools' doesn't exist

这是有道理的,因为没有pressbox.schools. 是fnt.schools。它试图与错误的数据库通信。

如何告诉我的实体我希望它使用哪个映射?我当然宁愿参考映射而不是数据库名称本身,这可能因环境而异。

4

2 回答 2

2

首先,在配置文件中声明您的连接(config.yml就可以了):

doctrine:
  dbal:
    default_connection: pressbox # change it as you wish
    connections:
      pressbox:
        driver:   %database_driver%
        host:     %database_host%
        port:     %database_port%
        dbname:   pressbox
        user:     pressbox_usr
        password: pressbox_pwd
        charset:  UTF8
      fnt:
        driver:   %database_driver%
        host:     %database_host%
        port:     %database_port%
        dbname:   fnt
        user:     fnt_usr
        password: fnt_pwd
        charset:  UTF8

然后声明实体管理器:

doctrine:
  orm:
    default_entity_manager: pressbox
    entity_managers:
      pressbox:
        connection: web
      fnt:
        connection: fnt

现在,在控制器中,您可以通过将名称传递给 Doctrine 来告诉 Doctrine 使用哪个实体管理器getEntityManager()

$fntEm = $this->getDoctrine()->getEntityManager('fnt');

假设fnt表的实体管理器被称为相同的名称。

于 2012-06-12T20:24:25.787 回答
0

我认为跨数据库关系非常复杂,或者您必须通过一些插件手动编码。

我发现这个关于同一主题的问题可能会对您有所帮助:

Doctrine2 和 Zend 框架中的多数据库连接

于 2012-06-18T17:03:55.340 回答