类中的教义注释“@Doctrine\ORM\Annotation\Entity”不存在或无法自动加载

Posted

技术标签:

【中文标题】类中的教义注释“@Doctrine\\ORM\\Annotation\\Entity”不存在或无法自动加载【英文标题】:Doctrine annotation "@Doctrine\ORM\Annotation\Entity" in class does not exist or cannot be autoloaded类中的教义注释“@Doctrine\ORM\Annotation\Entity”不存在或无法自动加载 【发布时间】:2018-01-09 12:32:38 【问题描述】:

我正在关注Doctrine Getting Started 教程。

我已经创建了 Product 类(通过从教程中复制/粘贴,以确保没有拼写错误),但是当我运行时

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

我收到[OK] No Metadata Classes to process。这似乎是因为Setup::createAnnotationMetadataConfigurationuseSimpleAnnotationReader 参数默认为true

所以如果我把它改成false:

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

运行上面的schema-tool:create 命令现在返回:

[Doctrine\Common\Annotations\AnnotationException]
[Semantical Error] The annotation "@Doctrine\ORM\Annotation\Entity" in class Product does not exist, or could not be auto-loaded.

什么时候应该执行,然后转储生成的 SQL。

在 SO 和其他地方搜索,似乎这个问题通常是由于在注释中使用正斜杠而不是反斜杠(我没有)或产品实体中的其他拼写错误(我复制/粘贴)引起的,或将 Doctrine 用作更广泛框架(Zend、Symfony)的一部分。

我的Product.php

<?php
// src/Product.php

use Doctrine\ORM\Annotation as ORM;

/**
 * @ORM\Entity @ORM\Table(name="products")
 **/
class Product

    /** @ORM\Id @ORM\Column(type="integer") @ORM\GeneratedValue **/
    protected $id;

    /** @ORM\Column(type="string") **/
    protected $name;

    public function getId()
    
        return $this->id;
    

    public function getName()
    
        return $this->name;
    

    public function setName($name)
    
        $this->name = $name;
    

【问题讨论】:

【参考方案1】:

尝试使用以下语句:

use Doctrine\ORM\Mapping as ORM;

代替:

use Doctrine\ORM\Annotation as ORM;

【讨论】:

太棒了!谢谢你。令人难以置信的是文档是错误的。作为一个刚刚学习Doctrine的人,您可以添加一个解释(这对其他人来说并不明显!)? 嗨@AdamHopkinson 唯一的问题是文档已经过时了:(

以上是关于类中的教义注释“@Doctrine\ORM\Annotation\Entity”不存在或无法自动加载的主要内容,如果未能解决你的问题,请参考以下文章

教义注释常量连接

我如何在教义中使用 php8 属性而不是注释?

教义 2 - 获取所有记录

@Controller 类中的 Spring @Value 注释未评估属性文件中的值

类中的变量注释[关闭]

java Builder 类中的附加方法(lombok 注释)