Doctrine2 - 无需处理的元数据类

时间:2013-07-04 14:49:58

标签: doctrine-orm

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

当我进入终端时:

$ 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

9 个答案:

答案 0 :(得分:95)

我认为您从Doctrine2: getting started获取了配置示例:

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

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

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

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

答案 1 :(得分:7)

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

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

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

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

  

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

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

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

答案 2 :(得分:4)

尝试清除缓存:

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

答案 3 :(得分:1)

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

paste

这取决于您是否创建了yaml或xml元配置文件......

希望这有帮助。

答案 4 :(得分: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的解决方案 我的方案是generating entities from existing database

newDefaultAnnotationDriver adds the namespace和方法注释说明如下:

  

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

答案 5 :(得分:0)

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

问题是由

引起的

'User\Entity' => 'property_entities'

用户部分来自旧实体

'Property\Entity' => 'property_entities'

更改了解决问题的方法

答案 6 :(得分: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 {
   }

?>

答案 7 :(得分:0)

如果您正在使用XML映射(使用apiVersion: networking.istio.io/v1alpha3 kind: EnvoyFilter metadata: name: connection namespace: my-test spec: filters: - filterName: envoy.buffer filterType: HTTP filterConfig: maxRequestBytes: 21000000.0 #21MB ),则可能需要注意以下几点:

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

答案 8 :(得分:-3)

尝试以下命令:

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