Doctrine 多级继承

Doctrine multi-level inheritance

我在 Symfony 5 中使用 Doctrine 和继承时遇到一些问题。

首先,我有一个只有 2 个日期(createdAt 和 updatedAt)的基本实体。

/**
 * @ORM\MappedSuperclass()
 */
class BaseEntity
{
    /**
     * @ORM\Column(type="datetime")
     */
    protected $createdAt;

    /**
     * @ORM\Column(type="datetime")
     */
    protected $updatedAt;
}

接下来,我有另一个 class 扩展 BaseEntity(例如“MyClass1”)。

/**
 * @ORM\Entity(repositoryClass=MyClass1Repository::class)
 * @ORM\MappedSuperclass()
 */
class MyClass1 extends BaseEntity
{
    /* Some properties */
}

最后,我 class 扩展了 MyClass1(例如“MyClass2”)。

/**
 * @ORM\Entity(repositoryClass=MyClass2Repository::class)
 */
class MyClass2 extends BaseEntity
{
    /* Some properties */
}

当我迁移我的数据库(make:migration)时,Doctrine 创建了 2 tables :

你能告诉我哪里错了吗?我只有 1 table : myclass2.

错误在 MyClass1 定义中。来自关于 inheritance mapping.

的 Doctrine 文档

A mapped superclass is an abstract or concrete class that provides persistent entity state and mapping information for its subclasses, but which is not itself an entity. Typically, the purpose of such a mapped superclass is to define state and mapping information that is common to multiple entity classes.

映射的超类本身不是实体,通过在 @MappedSuperclass 旁边添加 @Entity 可以有效地使其成为实体。映射的超类不应是实体且不可查询。