Php 没有为抽象类指定标识符/主键

Php 没有为抽象类指定标识符/主键,php,symfony,doctrine-orm,doctrine,abstract-class,Php,Symfony,Doctrine Orm,Doctrine,Abstract Class,我正在尝试实施映射策略。我用id和其他字段定义了抽象类。但我一直得到以下错误: 没有为实体“AppBundle\Entity\AbstractItem”指定标识符/主键。每个实体必须有一个标识符/主键。(500内部服务器错误) 这是我的课。如您所见,指定了唯一标识符$id use Doctrine\ORM\Mapping as ORM; /** * @ORM\Entity * @ORM\InheritanceType("JOINED") * @ORM\Discriminator

我正在尝试实施映射策略。我用id和其他字段定义了抽象类。但我一直得到以下错误:

没有为实体“AppBundle\Entity\AbstractItem”指定标识符/主键。每个实体必须有一个标识符/主键。(500内部服务器错误)

这是我的课。如您所见,指定了唯一标识符
$id

 use Doctrine\ORM\Mapping as ORM;

 /**
  * @ORM\Entity
  * @ORM\InheritanceType("JOINED")
  * @ORM\DiscriminatorColumn(name="type", type="string")
  * @ORM\DiscriminatorMap({"post" = "Post", "group" = "Group"})
  */
 class AbstractItem
 {
     /**
      * @var int
      *
      * @ORM\Id
      * @ORM\GeneratedValue(strategy="IDENTITY")
      */
     private $id;

     /**
      * @var \DateTime
     */
     protected $published;
     protected $object;
     protected $target;

     /**
      * @return mixed
      */
     public function getId()
     {
         return $this->id;
     }
 }

这个抽象类不应该是数据库中的实际实体

尝试放置@ORM\MappedSuperClass而不是@ORM\Entity

请尝试以下操作:

/**
 * @var int
 *
 * @ORM\Column(name="id", type="integer")
 * @ORM\Id
 * @ORM\GeneratedValue(strategy="AUTO")
 */
private $id;
与此相反:

  /**
  * @var int
  *
  * @ORM\Id
  * @ORM\GeneratedValue(strategy="IDENTITY")
  */
 private $id;

您需要在注释中指定列id

您是否尝试将
$id
的可见性设置为
受保护的
?条令使用映射超类的概念来处理抽象实体类:@JakubMatczak它没有帮助。我仍然有相同的错误现在我得到了“[Doctrine\ORM\Mapping\MappingException]不支持在映射的超类上定义继承信息”`Error你真的需要InheritanceType和它下面的东西吗?我不明白itI的目的是什么我试图实施这种映射策略: