Doctrine2 - 无需处理的元数据类

Jon*_*ony 38 doctrine-orm

文档或我有问题.我做了文档所说的所有内容.

当我输入终端时:

$ php vendor/bin/doctrine orm:schema-tool:create
Run Code Online (Sandbox Code Playgroud)

输出是:

No Metadata Classes to process
Run Code Online (Sandbox Code Playgroud)

我读了许多帖子,并谷歌尝试了许多例子,但没有.

http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/tutorials/getting-started.html

小智 99

我想你从Doctrine2中获取了配置示例:入门:

$isDevMode = true;
$config = Setup::createAnnotationMetadataConfiguration(array(__DIR__."/src"), $isDevMode);
Run Code Online (Sandbox Code Playgroud)

现在的诀窍是Setup :: createAnnotationMetadataConfiguration方法默认使用SimpleAnnotationReader.您可以通过将第五个参数更改为false来更改此行为:

$isDevMode = true;
$config = Setup::createAnnotationMetadataConfiguration(array(__DIR__."/src"), $isDevMode, null, null, false);
Run Code Online (Sandbox Code Playgroud)

这将迫使Doctrine使用非简单的AnnotationReader,它现在可以处理你的模型!

  • 它工作得很完美......这应该被标记为正确的答案! (3认同)
  • 非常有帮助的答案! (3认同)
  • 将其标记为正确的答案.同样重要的是:最新的文档版本(2018-01-29)建议`使用Doctrine\ORM\Annotation作为ORM;`但是`使用Doctrine\ORM\Mapping作为ORM;`必须用来正常工作. (3认同)
  • s..t我花了数小时试图弄清楚;-) (2认同)
  • 有人可以解释为什么需要它吗?这工作,但我不明白为什么. (2认同)

Don*_*nic 7

TL; DR:确保您创建的元数据类型与您使用的"创建元数据配置"方法相匹配.

我在处理Doctrine"入门"指南时遇到了同样的问题.仔细查看一下Doctrine代码后,我弄清楚出了什么问题.基本上,"获取EntityManager"部分的教程中的代码是:

$config = Setup::createAnnotationMetadataConfiguration(
    array(__DIR__."/src"), $isDevMode);
Run Code Online (Sandbox Code Playgroud)

在本教程的"从产品开始"部分中,它向我们展示了如何设置元数据,并为每个可能的选项提供了示例.教程说:

使用XML,YAML或Docblock Annotations配置实体的元数据.本入门指南将显示所有映射驱动程序的映射.文本中的引用将用于XML映射.

由于这个陈述,我决定使用XML配置.不幸的是,createAnnotationMetadataConfiguration教程代码中的方法似乎没有使用我创建的XML文件.(事后看来,这个方法特别指的是注释元数据,而不是XML元数据,这一点似乎更为明显!)

在我改为之后createXMLMetadataConfiguration,它按预期工作.因此,看起来这个问题的一个可能来源是您使用的"创建元数据配置"方法可能与您创建的元数据类型不匹配.


小智 -3

尝试以下命令:

php vendor/bin/doctrine-module orm:schema-tool:create
Run Code Online (Sandbox Code Playgroud)