在Doctrine中使用多个数据库进行映射

时间:2013-01-21 13:01:50

标签: symfony doctrine

我正在尝试设置我的symfony以使用两个数据库连接。问题是Symfony不会将实体映射到正确的EntityManager。所以执行一个查询,我必须告诉Symfony它应该使用什么样的经理。

我的配置:

# Doctrine Configuration
doctrine:
  dbal:
    default_connection: default
      connections:
        default:
          driver:   "%database_driver%"
          host:     "%database_host%"
          port:     "%database_port%"
          dbname:   "%database_name%"
          user:     "%database_user%"
          password: "%database_password%"
          charset:  UTF8

        lookup:
          driver:   "%database_driver%"
          host:     "%database_host%"
          port:     "%database_port%"
          dbname:   "Lookup"
          user:     "%database_user%"
          password: "%database_password%"
          charset:  UTF8

  orm:
    auto_generate_proxy_classes: "%kernel.debug%"

    default_entity_manager: default
    entity_managers:
      default:
        connection: default
          mappings:
            MbMyAppBundle: ~

      mvibes:
        mappings:
          MbLookupBundle: ~
        connection: mvibes

因此,要从我的查询中查询,我必须这样做:$this->getDoctrine()->getRepository('MbLookupBundle:Country', 'lookup');

相反,我希望我可以省略第二个参数。这样,我的包就会是独立的。项目经理可以决定他将在他的项目中实施什么数据库配置。他只需要确保映射是正确的。

这是如何工作的?如果不可能,使用的映射是什么?

1 个答案:

答案 0 :(得分:1)

连接命名时出错:

# Doctrine Configuration
doctrine:
  dbal:
    default_connection: default
      connections:
        default:
          # ...

        mvibes:   #This is the name of the connection
          # ...

  orm:
    auto_generate_proxy_classes: "%kernel.debug%"

    default_entity_manager: default
    entity_managers:
      default:
        connection: default
        mappings:
          MbMyAppBundle: ~

      mvibes:
        mappings:
          MbLookupBundle: ~
        connection: mvibes #must refre to a connection's name defined above

官方文件:http://symfony.com/doc/current/cookbook/doctrine/multiple_entity_managers.html 我写的一篇博文:http://blog.alterphp.com/2011/10/configuration-trick-for-multiple-entity.html