Symfony2 - Doctrine Entity子目录

时间:2013-01-25 21:36:47

标签: php symfony doctrine-orm

基本上,我有一个代码分支连接到三个不同的实体管理器(以及随后的三个不同的MySQL数据库)。 不幸的是,有两个数据库的表名称相同,所以我不能将所有实体放在同一个目录中,对于结构,id就像要避免那样。

所以,我的问题是......我将如何设置它以便我可以拥有一个实体包,其中子目录位于Entity\Resources\config\doctrine\

e.g。

Acme\EntityBundle\Entity\DB1\Test.php
Acme\EntityBundle\Entity\DB1\Acme.php
Acme\EntityBundle\Entity\DB2\Test.php
Acme\EntityBundle\Entity\DB2\Foo.php
Acme\EntityBundle\Entity\DB3\Bar.php

Resources\config\doctrine\

的想法相同

这里的配置非常模糊......

2 个答案:

答案 0 :(得分:6)

您只需要重命名您的学说配置文件。

例如:

  • Bundle/Entity/DB1/User.php
  • Bundle/Entity/DB2/User.php

会产生相应的配置文件(在这种情况下为.yml,随意更改)

  • Bundle/Resources/config/doctrine/DB1.User.orm.yml
  • Bundle/Resources/config/doctrine/DB2.User.orm.yml

答案 1 :(得分:4)

如果你只需要捆绑来存储实体,我宁愿建议将它们存储在外面。这样你就可以将它们从框架中分离出来。

在这两种情况下配置都类似。可以在the official docs中访问参考。

以下是一个例子:

#app/config/config.yml
doctrine:
    orm:
        auto_generate_proxy_classes: %kernel.debug%
        auto_mapping: true
        mappings:
            AcmeDB1:
                type:       xml
                is_bundle:  false
                dir:        %kernel.root_dir%/../src/Acme/Entity/DB1/config
                prefix:     Acme\Entity\DB1
                alias:      AcmeDB1
            AcmeDB2:
                type:       xml
                is_bundle:  false
                dir:        %kernel.root_dir%/../src/Acme/Entity/DB2/config
                prefix:     Acme\Entity\DB2
                alias:      AcmeDB2

很少注意到:

  • dir是指映射目录,如果使用注释,则应该是放置实体的目录
  • 前缀是实体命名空间的一部分,它应该是唯一的
  • alias使您可以引用具有较短命名空间的实体,例如AcmeDB1:User