使用YAML在Symfony2中进行Doctrine映射

Iva*_*tch 4 yaml entity entities symfony doctrine-orm

我对Symfony2中的Doctrine的YAML配置有疑问.

我通过"doctrine:generate:entity"创建了一个实体,并选择了YAML作为映射格式.这没有在../Entity/"MyEntity".php上添加任何元数据,这将允许我更新或创建我的架构.

举个例子,如果我跑

./app/console doctrine:schema:create
Run Code Online (Sandbox Code Playgroud)

它失败了,说:

[RuntimeException]                                                 
Bundle "MySuperBundle" does not contain any mapped entities.
Run Code Online (Sandbox Code Playgroud)

我的自动化已经设置为"true".

如果我选择使用注释配置,这不会是一个问题.

我错过了什么?我还有什么额外的步骤吗?

提前谢谢,问候,

伊万

fru*_*ous 6

我只是很开心地看着Doctrine配置初始化代码.我发现的是:

  • 使用auto_mapping会导致为单个默认实体管理器设置各种默认值; 它将type值保留为false
  • 如果type是假的配置代码看起来到默认的目录可能配置文件,并尽快找到有效扩展的文件,它决定了这是配置正在做的方式,顺序为xml,yml,php
  • 如果它没有找到它假设的任何一个 annotation

Bundle/Resources/config/doctrine文件夹中还有其他内容吗?如果是这样,它可能会抛弃自动检测.

除此之外,基本上如果你已经使用了默认值,并且有一些实体类和有效的配置,你正在做的事情应该没有任何额外的配置.您已经说过"auto_mapping"是真的,但您是否更改了Doctrine配置的其他任何内容?

尝试明确配置内容可能是一个想法,例如,如Symfony Doctrine docs中所述,从默认配置开始

doctrine:
    dbal:
        driver:   "%database_driver%"
        #etc

    orm:
        auto_generate_proxy_classes: "%kernel.debug%"
        auto_mapping: true
Run Code Online (Sandbox Code Playgroud)

明确的

doctrine:
    dbal:
        driver:   "%database_driver%"
        #etc

    orm:
        auto_generate_proxy_classes: "%kernel.debug%"
        auto_mapping: false
        mappings:
            MySuperBundleName:
                type: yml
                dir: Resources/config/doctrine
Run Code Online (Sandbox Code Playgroud)