使用YAML在Symfony2中进行Doctrine映射

时间:2014-10-01 06:46:17

标签: symfony doctrine-orm entity yaml entities

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

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

例如,如果我运行

./app/console doctrine:schema:create

它失败了,说:

[RuntimeException]                                                 
Bundle "MySuperBundle" does not contain any mapped entities.

我的自动化已设置为" true"。

如果我选择使用注释配置,这不会有问题。

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

提前谢谢,问候,

伊万

1 个答案:

答案 0 :(得分:6)

我很高兴看到Doctrine配置初始化代码。我发现的是:

  • 使用auto_mapping会导致为单个默认实体管理器设置各种默认值;它将type值保留为false
  • 如果type为false,则配置代码会查找可能配置文件的默认目录,并且一旦找到有效扩展名的文件,它就会按顺序决定配置的完成方式xmlymlphp
  • 如果找不到任何假设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

显式

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

    orm:
        auto_generate_proxy_classes: "%kernel.debug%"
        auto_mapping: false
        mappings:
            MySuperBundleName:
                type: yml
                dir: Resources/config/doctrine