使用Symfony2和Doctrine2选择动态数据库

时间:2013-10-31 10:10:47

标签: php mysql symfony doctrine-orm

我遇到以下问题: 我有一个包含Doctrine Entities的核心数据库,它将我的登录信息保存到其他数据库。注册到我的应用程序的每个客户端都将获得自己的数据库。我使用子域来阻止必须使用哪个数据库。客户端数据库包含其他Doctrine实体,以保留客户端的数据。

为了确定基于子域的数据库,我查了一下 Symfony 2 : multiple and dynamic database connectionhttp://knpuniversity.com/screencast/question-answer-day/symfony2-dynamic-subdomains。我尝试了提问者的解决方案和答案的解决方案。 给定的解决方案有效,但仅限于一部分。我创建了一个能够在Controller中的数据库之间切换的服务,但是当我创建一个新的Entity时,Symfony总是希望在主数据库上执行CREATE TABLE。

我希望Doctrine将表格划分到数据库中。我也试过Annotations,但我无法让它工作。有没有人建议如何分离实体并将它们放在不同的数据库中?理想情况下,我应该能够定义每个实体使用的数据库。

其他信息:

Symfony 2.3

主义2

1 个答案:

答案 0 :(得分:1)

如果你有动态数据库,可能连接到第二个实体管理器(对于动态):

doctrine:
  dbal:
    connections:
      default:
        # default configuration
      dynamic:
        # placeholder used to replace connection information
  orm:
    entity_managers:
      default:
        connection: default
      dynamic:
        connection: dynamic
        mappings:
          MyBundle:
            type: annotation
            dir: DynamicEntity # for ext \My\MyBundle\DynamicEntity\Item class

下一步保存:

$em = $this->get('doctrine')->getManager('dynamic');
$em->persist(new \My\MyBundle\DynamicEntity\Item());
$em->flush();

您必须记住有关能源管理器映射配置(more in symfony 2 documentation)的信息。如果没有这个,您将能够将每个实体放入两个数据库中。