Symfony2 - Doctrine 实体子目录

6
基本上,我有一段代码分支,连接到三个不同的实体管理器(随后是三个不同的MySQL数据库)。不幸的是,其中两个数据库的表名相同,所以我不能将所有实体放在同一个目录中,并且出于结构考虑,我也想避免这种情况。
因此,我的问题是...我应该如何设置才能拥有一个单一的实体捆绑包,在Entity\和Resources\config\doctrine\下有子目录。
例如:
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个回答

7
你只需要重命名你的doctrine配置文件。
例如:
  • 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

4
如果您只需要存储实体,我建议将它们存储在外部,这样可以将它们与框架分离。无论哪种情况,配置都是相似的。参考文档可在官方文档中找到。以下是一个例子:
#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指的是映射目录,如果您使用注释,则应该是实体所在的目录
  • 前缀是实体命名空间的一部分,应该是唯一的
  • 别名使您可以使用较短的命名空间引用实体,例如AcmeDB1:User

忘了提到,我正在从数据库导入yml文件。那么,doctrine:mapping:import命令如何与此配合工作? - Ascherer
试一下。最坏的情况是你需要将文件移动到适当的目录,然后稍后更新实体命名空间和映射以反映新位置。这不应该是一个问题,因为你只需要做一次。如果你有很多实体,你可以用一个shell脚本自动更新。 - Jakub Zalas
1
我实际上已经前进并对DoctrineBundle代码进行了拉取请求,在doctrine:mapping:import命令中添加了对子空间的支持。等待观察。 - Ascherer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接