我怎样才能在超类中拥有实体的列?

How can I have Columns of a Entity in a superclass?

我想在实体的超级class/基础class 中拥有一些属性。 我想要实现的最简单的例子是:

<?php
class BaseEntity{
    /**
     * @ORM\Id
     * @ORM\Column(type="integer")
     * @ORM\GeneratedValue
     * @var int internal ID
     */
    private int $id;

    public function getId(): int{
        return $this->id;
    }
}
/**
 * @ORM\Entity
 * @ORM\Table(name="someentities")
 */
class SomeEntity extends BaseEntity{
    // more stuff
}

有没有办法用 doctrine ORM 做到这一点?上面的例子不行,Doctrine 没有在 SomeEntity 中找到主键。 您可以通过使 BaseEntity 本身成为实体来实现这一点,但我想避免这种情况。

基本上你需要做的就是使用Mapped Superclasses。 对于上面的示例,它看起来像这样:

<?php
/** @ORM\MappedSuperclass */
class BaseEntity{
    /**
     * @ORM\Id
     * @ORM\Column(type="integer")
     * @ORM\GeneratedValue
     * @var int internal ID
     */
    private int $id;

    public function getId(): int{
        return $this->id;
    }
}
/**
 * @ORM\Entity
 * @ORM\Table(name="someentities")
 */
class SomeEntity extends BaseEntity{
    // more stuff
}

如果您偶然发现了这个问题,您可能也在寻找 Embeddables,具体取决于您要完成的任务。