我正在使用 Symfony 4 和 Doctrine,其中的实体具有相同的公共属性,例如 createdWhen、editedWhen...
我想做的是:
定义一种包含这些公共属性并实现 setter 和 getter 的基本实体。以及从该基本实体继承的许多实体。数据库字段都应该在各自的子实体的表中定义(不要在db中创建超级表等)。
例子:
/**
* @ORM\Entity(repositoryClass="App\Repository\BaseRepository")
*/
class Base
{
/**
* @ORM\Id()
* @ORM\GeneratedValue()
* @ORM\Column(type="integer")
*/
private $id;
/**
* @ORM\Column(type="string", length=127, nullable=true)
*/
private $createdWhen;
// Getter and setter
...
}
/**
* @ORM\Entity(repositoryClass="App\Repository\PersonRepository")
*/
class Person extends Base
{
/**
* @ORM\Column(type="string", length=127, nullable=true)
*/
private $name;
// Getter and setter
...
}
/**
* @ORM\Entity(repositoryClass="App\Repository\CarRepository")
*/
class Car extends Base
{
/**
* @ORM\Column(type="string", length=127, nullable=true)
*/
private $brand;
// Setter and getter
...
}
Run Code Online (Sandbox Code Playgroud)
这应该创建表“person”和“car”(每个都有id,created_when)但没有表基。
我仍然希望能够使用 bin/console make:migration 来更新数据库架构。
Symfony 4 可以使用这种方法吗?如果是,我将如何定义实体以及我必须在配置等方面进行哪些更改?
您正在寻找实体继承
像这样重写你的代码
/** @MappedSuperclass */
class Base
{
...
}
Run Code Online (Sandbox Code Playgroud)
事实上,这是Doctrine的一部分,这是官方文档所说的
映射超类是一个抽象或具体的类,它为其子类提供持久的实体状态和映射信息,但它本身不是一个实体。通常,这种映射超类的目的是定义多个实体类共有的状态和映射信息。
| 归档时间: |
|
| 查看次数: |
1038 次 |
| 最近记录: |