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 :
- 我的class1
- 我的class2
你能告诉我哪里错了吗?我只有 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
可以有效地使其成为实体。映射的超类不应是实体且不可查询。
我在 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 :
- 我的class1
- 我的class2
你能告诉我哪里错了吗?我只有 1 table : myclass2.
错误在 MyClass1
定义中。来自关于 inheritance mapping.
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
可以有效地使其成为实体。映射的超类不应是实体且不可查询。