Symfony2实体正在尝试使用错误的数据库

时间:2012-06-12 20:21:00

标签: symfony doctrine-orm

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

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

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

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

2 个答案:

答案 0 :(得分:1)

首先,在配置文件中声明您的连接( 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

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

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

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

答案 1 :(得分:0)

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

我发现了关于可能对您有帮助的同一主题的问题:

Multiple database connection in Doctrine2 and Zend framework