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


Dynamic database selection using Symfony2 and Doctrine2

我遇到了以下问题:我有一个核心数据库,其中包含教义实体,这些实体将我的登录信息保存到其他数据库中。每个注册到我的应用程序的客户端都将获得自己的数据库。我使用子域来确定必须使用哪个数据库。客户数据库包含其他原则实体,以保留客户的数据。

为了根据子域确定数据库,我检查了Symfony 2:多动态数据库连接和 http://knpuniversity.com/screencast/question-answer-day/symfony2-dynamic-subdomains。我已经尝试了提问者的解决方案和答案的解决方案。给定的解决方案有效,但仅适用于一部分。我创建了一个服务,以便能够在控制器中的数据库之间切换,但是当我创建一个新实体时,Symfony总是希望在主数据库上执行CREATE TABLE。

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

附加信息:

Symfony 2.3

教义2

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

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();
你必须修正关于

eneity manager映射配置的问题(更多在symfony 2文档中)。如果没有这个,您将能够将每个实体放入两个数据库中。