Orm Symfony3捆绑包内的yml实体映射,捆绑包外的实体类

Orm Symfony3捆绑包内的yml实体映射,捆绑包外的实体类,orm,doctrine-orm,symfony,php-7,Orm,Doctrine Orm,Symfony,Php 7,我已经将我的代码划分为AppBundle和另一个业务逻辑名称空间,AppBundle将保存与框架相关的任何内容(包括条令内容) 所以基本上我有这样的文件结构: └── src ├── AppBundle │   └── Resources │   └── config │   └── doctrine │   ├── Attributes.orm.yml │   └── Use

我已经将我的代码划分为AppBundle和另一个业务逻辑名称空间,AppBundle将保存与框架相关的任何内容(包括条令内容)

所以基本上我有这样的文件结构:

└── src
    ├── AppBundle
    │   └── Resources
    │       └── config
    │           └── doctrine
    │               ├── Attributes.orm.yml
    │               └── User.orm.yml
    └── Logic
        └── User
            ├── Attributes.php
            └── User.php
映射如下所示:

Logic\User\User:
    type: entity
    table: user
    id: (...)
    fields: (...)
    embedded:
        attributes:
            class: Logic\User\Attributes
和属性映射:

Logic\User\Attributes:
    type: embeddable
    fields: (...)
现在,当我尝试更新架构时,出现错误:

./sf doctrine:schema:update --dump-sql


  [Doctrine\Common\Persistence\Mapping\MappingException]  
  Class 'AppBundle\Entity\Attributes' does not exist      

基本上,映射是被找到并处理的,但是symfony忽略了我在映射中编写的类的名称空间,并尝试在bundle实体目录中找到它。我必须怎么做才能修复它?

这里定义了条令映射配置:

特别是,您需要将dir设置为映射目录,并将前缀设置为实体名称空间

orm: 默认\实体\管理器:默认 自动生成代理类:%kernel.debug%

    entity_managers:

        default:
            connection: default
            mappings:
                CeradOrgBundle:    ~
                CeradUserBundle:   ~
                CeradPersonBundle: ~

        games:
           connection: games
           mappings:
                CeradGameBundle: 
                    dir:    Resources/config/doctrine2
                    prefix: Cerad\Bundle\GameBundle\Doctrine\Entity
在上面的示例中,我创建了两个实体管理器。默认实体管理器使用标准布局处理各种捆绑包

游戏管理器显示如何自定义映射信息。在这种情况下,orm文件位于doctrine2目录中,而不是doctrine目录中

前缀是您感兴趣的内容。请注意,这些实体位于DoctrineEntity下,而不仅仅是普通实体目录


因此,设置前缀,就可以开始了。

这里定义了条令映射配置:

特别是,您需要将dir设置为映射目录,并将前缀设置为实体名称空间

orm: 默认\实体\管理器:默认 自动生成代理类:%kernel.debug%

    entity_managers:

        default:
            connection: default
            mappings:
                CeradOrgBundle:    ~
                CeradUserBundle:   ~
                CeradPersonBundle: ~

        games:
           connection: games
           mappings:
                CeradGameBundle: 
                    dir:    Resources/config/doctrine2
                    prefix: Cerad\Bundle\GameBundle\Doctrine\Entity
在上面的示例中,我创建了两个实体管理器。默认实体管理器使用标准布局处理各种捆绑包

游戏管理器显示如何自定义映射信息。在这种情况下,orm文件位于doctrine2目录中,而不是doctrine目录中

前缀是您感兴趣的内容。请注意,这些实体位于DoctrineEntity下,而不仅仅是普通实体目录

所以设置好前缀,你就可以出发了