Doctrine orm Doctrine2-没有要处理的元数据类

Doctrine orm Doctrine2-没有要处理的元数据类,doctrine-orm,Doctrine Orm,文档或我有问题。我照文件上说的做 当我进入终端时: $ php vendor/bin/doctrine orm:schema-tool:create 输出为: No Metadata Classes to process 我读了很多帖子,用谷歌搜索了很多例子,但什么都没有 尝试以下命令: php vendor/bin/doctrine-module orm:schema-tool:create 我认为您的配置示例来自: $isDevMode=true; $config=Setup::cre

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

当我进入终端时:

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

No Metadata Classes to process
我读了很多帖子,用谷歌搜索了很多例子,但什么都没有


尝试以下命令:

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

我认为您的配置示例来自:

$isDevMode=true;
$config=Setup::createAnnotationMetadataConfiguration([\uuuu DIR.\uuuu.'/src”],$isDevMode);
现在的技巧是,
Setup::createAnnotationMetadataConfiguration
方法默认使用
SimpleAnnotationReader
。通过将第五个参数更改为
false
,可以更改此行为:

$isDevMode=true;
$config=Setup::createAnnotationMetadataConfiguration([\uuuu DIR.'/src“],$isDevMode,null,null,false);

这将迫使条令使用不简单的
AnnotationReader
,它现在可以处理您的模型

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

我在阅读《入门指南》时遇到了同样的问题。在仔细阅读了一下条令代码之后,我发现了哪里出了问题。基本上,“获取EntityManager”部分教程中的代码是:

$config=Setup::createAnnotationMetadataConfiguration([\uuuu DIR\uuu.'/src”],$isDevMode);
在本教程的“从产品开始”一节中,我们进一步了解了如何设置元数据,并给出了每个可能选项的示例。教程说:

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

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


在我将其改为
createXMLMetadataConfiguration
之后,它就按预期工作了。因此,这个问题的一个可能原因是,您使用的“创建元数据配置”方法可能与您创建的元数据类型不匹配。

在新的ZF2模块中创建新的条令配置时,我遇到了相同的问题

问题是由

“用户\实体”=>“属性\实体”

用户部分来自旧实体

“属性\实体”=>“属性\实体”


更改此选项修复了此问题

在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元配置文件


希望这能有所帮助。

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

$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
    )
);
来自 我的设想是

和方法注释说明如下:

如果$UseSimpleAnotationReader为true,则表示法
@Entity
将 否则,将支持符号
@ORM\Entity


尝试清除缓存:

sudo -u www-data php app/console cache:clear --env=dev

在我的例子中,问题在于用于注释的星号的数量

<?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 {
   }

?>

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

  • 您的XML映射文件
    .dcm.XML
    结束,而不仅仅是以.XML结束
  • XML文件包含完整的实体类名,包括名称空间。例如,对于类
    Company\Solution\Models\User
    ,必须在xml路径中具有
    Company.Solution.Models.User.dcm.xml
    映射文件

无法打开输入文件:vendor/bin/doctor模块我认为您的项目使用了composer。请尝试使用composer安装或更新。如果什么也没有发生,请尝试将composer.lock重命名为composer.lock.bak,然后重试安装。但是,如果在安装过程中出现一些错误,请删除供应商文件夹,然后重试。是否添加了产品实体?添加Product.php实体和元数据后(我建议在实体类中使用注释,即示例代码中的“php”选项卡),您将能够成功运行
orm:schema工具:create
命令-教程对此并不清楚,所以你没有做错任何事。使用本教程:它非常有效。。。这应该被标记为正确答案!s、 .t我花了几个小时想弄明白;-)非常非常有帮助的回答!有人能解释为什么需要这样做吗?这是可行的,但我不明白为什么。把它标记为正确的答案。同样重要的是:最新文件版本(2018-01-29)建议
使用条令\ORM\Annotation作为ORM
使用条令\ORM\Mapping作为ORM正常工作。在使用XML方式时,请参阅并考虑使用路径/CONFIG/XML和NO/SRC。此答案需要更多的投票,因为这适用于最新版本。