41

文档或我有问题。我做所有文件所说的。

当我输入终端时:

$ php vendor/bin/doctrine orm:schema-tool:create

输出是:

No Metadata Classes to process

我读了很多帖子,谷歌并尝试了很多例子,但什么也没有。

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

4

9 回答 9

110

我认为您从Doctrine2 中获取了配置示例:入门

$isDevMode = true;
$config = Setup::createAnnotationMetadataConfiguration([__DIR__."/src"], $isDevMode);

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

$isDevMode = true;
$config = Setup::createAnnotationMetadataConfiguration([__DIR__."/src"], $isDevMode, null, null, false);

这将迫使 DoctrineAnnotationReader现在使用可以处理您的模型的非简单模型!

于 2013-10-02T02:35:23.177 回答
8

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

我在阅读 Doctrine “Getting Started” 指南时遇到了同样的问题。在浏览了 Doctrine 代码之后,我发现出了什么问题。基本上,教程中“获取EntityManager”部分的代码是:

$config = Setup::createAnnotationMetadataConfiguration([__DIR__ . "/src"], $isDevMode);

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

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

由于这个声明,我决定使用 XML 配置。不幸的是,createAnnotationMetadataConfiguration教程代码中的方法似乎没有使用我创建的 XML 文件。(事后看来,这个方法专门指的是注解元数据,而不是 XML 元数据,这似乎更加明显! )

在我将其更改为之后createXMLMetadataConfiguration,它按预期工作。所以看起来这个问题的一个可能来源是您使用的“创建元数据配置”方法可能与您创建的元数据类型不匹配。

于 2013-11-08T19:27:12.087 回答
4

尝试清除缓存:

sudo -u www-data php app/console cache:clear --env=dev
于 2016-09-08T14:56:40.773 回答
2

在 bootstrap.php 中取消注释以下行之一:

// or if you prefer yaml or XML
//$config = Setup::createXMLMetadataConfiguration(array(__DIR__."/config/xml"), $isDevMode);
//$config = Setup::createYAMLMetadataConfiguration(array(__DIR__."/config/yaml"), $isDevMode);

这取决于您创建的是 yaml 还是 xml 元配置文件...

希望这可以帮助。

于 2015-11-27T10:31:54.137 回答
1

自定义 Doctrine 安装有同样的问题。我的解决方案是重新设置元数据驱动程序:

$config->setMetadataDriverImpl(
    new Doctrine\ORM\Mapping\Driver\AnnotationDriver(
        new Doctrine\Common\Annotations\CachedReader(
            new Doctrine\Common\Annotations\AnnotationReader(),
            new Doctrine\Common\Cache\ArrayCache()
        ),
        ENTITY_DIR
    )
);

来自http://support.skipper18.com/1120/how-use-external-tools-generate-doctrine-getters-and-setters?show=1121#a1121的解决方案 我的场景是从现有数据库生成实体

newDefaultAnnotationDriver添加命名空间,方法注释说明如下:

如果 $useSimpleAnnotationReader 为真,则表示法@Entity将起作用,否则,@ORM\Entity将支持表示法。

于 2016-08-01T04:07:16.900 回答
0

在新的 ZF2 模块中创建新的学说配置时,我遇到了同样的问题。

问题是由

'User\Entity' => 'property_entities'

用户部分来自旧实体

'Property\Entity' => 'property_entities'

更改以解决问题

于 2015-01-26T03:39:19.903 回答
0

如果您使用 XML 映射(使用Setup::createXMLMetadataConfiguration()),您可能需要注意以下几点:

  • 您的 XML 映射文件以 .结尾 .dcm.xml,而不仅仅是.xml.
  • 您的 XML 文件包含完整的实体类名,包括命名空间。例如,对于一个类Company\Solution\Models\User,您的 XML 路径中必须有Company.Solution.Models.User.dcm.xml映射文件。
于 2020-11-11T15:39:43.913 回答
0

就我而言,问题在于用于注释的星号数量

<?php

    namespace Models;

    use Doctrine\ORM\Annotation\{Id, Column, GeneratedValue, Entity};

    /** // I originally used one asterisk here and kept getting the error in question. Error disappeared after doubling the asterisk as it is in this answer
    * @Entity(repositoryClass="Doctrine\ORM\Annotation\Id")
    */
   class User {
   }

?>
于 2020-01-24T20:47:23.510 回答
-3

尝试以下命令:

php vendor/bin/doctrine-module orm:schema-tool:create
于 2013-07-04T15:09:00.270 回答