我们可以在 Doctrine 中扩展实体吗?
Posted
技术标签:
【中文标题】我们可以在 Doctrine 中扩展实体吗?【英文标题】:Can we extend entities in Doctrine? 【发布时间】:2016-04-28 02:11:47 【问题描述】:我正在使用 Doctrine 进行我的第一个项目,但我偶然发现了这一点。
我有一个实体 User,它是一个映射的超类。
/**
* @ORM\MappedSuperclass
*/
abstract class User
/**
* @var int
*/
protected $id;
/**
* @var string
*/
protected $name;
/**
* @ORM\Embedded(class="AppBundle\Entity\Person")
* @var Person
*/
protected $person;
/**
* @var Authors[]|Collection|Selectable
*/
protected $authors;
我从上面的用户实体创建一个作者实体
class Author extends User
/**
* @ORM\Id
* @ORM\Column(type="integer")
* @ORM\GeneratedValue(strategy="AUTO")
* @var int
*/
protected $id;
/**
* @ORM\JoinColumn(name="publisher_id", referencedColumnName="id", nullable=false, unique=true)
* @ORM\OneToOne(targetEntity="AppBundle\Entity\Publisher", inversedBy="book")
* @var Publisher
*/
protected $publisher;
/**
* @ORM\OneToMany(targetEntity="AppBundle\Entity\Publisher", mappedBy="author")
* @var Approval[]|Collection|Selectable
*/
protected $approvals;
我使用 Author 实体创建了一个对象实体 Book
/**
* @ORM\Entity
* @ORM\Table(name="magazine", options="collate":"utf8_general_ci")
*/
class Book
/**
* @ORM\Id
* @ORM\Column(type="integer")
* @ORM\GeneratedValue(strategy="AUTO")
* @var int
*/
protected $id;
/**
* @ORM\JoinColumn(name="publisher_id", referencedColumnName="id", nullable=false, unique=true)
* @ORM\OneToOne(targetEntity="AppBundle\Entity\Publisher", inversedBy="book")
* @var Publisher
*/
protected $publisher;
我的 Publisher 实体如下:
/**
* @ORM\Entity
* @ORM\Table(name="ops_approval", options="collate":"utf8_general_ci")
*/
class Publisher
/**
* @ORM\Id
* @ORM\Column(type="integer")
* @ORM\GeneratedValue(strategy="AUTO")
* @var int
*/
protected $id;
/**
* @ORM\Column(type="datetime", nullable=false)
*/
protected $createdAt;
/**
* @ORM\ManyToOne(targetEntity="AppBundle\Entity\Author", inversedBy="authors")
* @ORM\JoinColumn(name="author_id", referencedColumnName="id")
*/
protected $author;
/**
* @ORM\OneToMany(targetEntity="AppBundle\Entity\Book", mappedBy="book"
*/
protected $book;
现在,我可以扩展已发布实体以创建图书实体
/**
* @ORM\Entity
* @ORM\Table(name="book", options="collate":"utf8_general_ci")
*/
class Book extends Magazine
/**
* @ORM\Id
* @ORM\Column(type="integer")
* @ORM\GeneratedValue(strategy="AUTO")
* @var int
*/
protected $id;
/**
* @ORM\JoinColumn(name="published_id", referencedColumnName="id", nullable=false, unique=true)
* @ORM\OneToOne(targetEntity="AppBundle\Entity\Publisher", inversedBy="book")
* @var Publisher
*/
protected $publisher;
【问题讨论】:
Doctrine: extending entity class的可能重复 @Miro 这是否意味着我必须通过 Mapped 超类进行扩展,而一个实体不能扩展另一个实体? 您的问题是什么?您只是粘贴了一些代码。 @StephanVierkant 查看我的评论。我想知道是否可以扩展具有父抽象(映射超类)类的实体类。我不想从映射的超类扩展新实体。虽然,我观察到,当我这样做时,我生成的模式在扩展类中缺少一些属性。有解决办法吗? 【参考方案1】:使用特征而不是继承。
如果需要,您还可以覆盖一些映射:http://doctrine-orm.readthedocs.io/projects/doctrine-orm/en/latest/tutorials/override-field-association-mappings-in-subclasses.html
【讨论】:
以上是关于我们可以在 Doctrine 中扩展实体吗?的主要内容,如果未能解决你的问题,请参考以下文章