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

Ada*_*son 3 php orm doctrine doctrine-orm

我正在遵循Doctrine 入门教程.

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

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

我得到[OK] No Metadata Classes to process.看来这是因为默认的useSimpleAnnotationReader参数.Setup::createAnnotationMetadataConfigurationtrue

所以,如果我改为false:

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

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.
Run Code Online (Sandbox Code Playgroud)

什么时候应该执行然后转储出生成的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;
    }
}
Run Code Online (Sandbox Code Playgroud)

Mat*_*teo 14

请尝试使用以下语句:

use Doctrine\ORM\Mapping as ORM;
Run Code Online (Sandbox Code Playgroud)

代替:

use Doctrine\ORM\Annotation as ORM;
Run Code Online (Sandbox Code Playgroud)

  • 嗨@AdamHopkinson唯一的问题是该文档已过时:( (2认同)