Doctrine2 + Symfony2:如何在Symfony2中使用命名空间的Doctrine实体?

时间:2014-10-10 11:15:48

标签: php symfony doctrine-orm

我尝试在Symfony 2.5中使用Doctrine,并使用XML配置进行实体映射。

我有一个名称空间类BarACME\TestBundle\Entity\Foo\Bar

由于我有许多实体,它们都不能驻留在ACME\TestBundle\Entity命名空间中,但必须放在子命名空间中。

创建实体没问题,但我无法弄清楚ORM XML配置文件的放置位置。

我尝试了Resources/config/doctrine/Foo/Bar.orm.xml,但找不到映射文件:

$ php app/console doctrine:schema:create --dump-sql
No Metadata Classes to process.

我尝试了Resources/config/doctrine/Bar.orm.xml,忽略了额外的Foo名称空间Entity,尽管在Bar.orm.xml元素name中正确指定了完整名称空间。

$ php app/console doctrine:schema:create --dump-sql                  
[Doctrine\Common\Persistence\Mapping\MappingException] 
Class 'ACME\TestBundle\Entity\Bar' does not exist  

我错过了什么? XML映射文件为这些命名空间类驻留的正确位置是什么?

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

使用@ user3749178 Foo.Bar.orm.xml的建议是有效的,并且是解决问题的最简单方法,尽管所有映射文件最终都在一个目录中。

根据以下内容,还可以为所有内容创建单独的目录:

http://symfony.com/doc/current/reference/configuration/doctrine.html#mapping-configuration

以下是配置示例:

doctrine:

  orm:
    default_entity_manager:       default
    auto_generate_proxy_classes: %kernel.debug%

    entity_managers:

    default:
      connection: default
      mappings:
        foo1: 
          prefix: Cerad\Bundle\ProjectGameBundle\Doctrine\Entity\Foo1
          type:   yml
          dir:    src/ProjectGameBundle/Doctrine/EntityMapping/Foo1
          is_bundle: false
        foo2: 
          prefix: Cerad\Bundle\ProjectGameBundle\Doctrine\Entity\Foo2
          type:   yml
          dir:    src/ProjectGameBundle/Doctrine/EntityMapping/Foo2
          is_bundle: false

您基本上为每个包含实体的目录指定一个映射。