Доктрина: расширение класса сущностей
Я хотел бы расширить классы Entity\Base, как это сделать в Доктрине 2.1? Мое исследование показало, что всякий раз, когда кто-то сталкивается с проблемой, связанной с этим, он переключается на доктрину 1.2:)n Я использую конфигурацию yaml
2 answers
Доктрина 2.Сущности X работают как POPO (Простые старые объекты PHP). Для правильного расширения Доктрина заставляет вас использовать концепцию JPA, называемую Отображенными суперклассами. Идея довольно проста. Всякий раз, когда вы хотите иметь базовый класс и хотите, чтобы ваши сущности расширялись от него (я не говорю о наследовании на уровне БД), все, что вам нужно сделать, это создать свой базовый класс как MappedSuperclass.
Вот пример: http://www.doctrine-project.org/docs/orm/2.1/en/reference/inheritance-mapping.html#mapped-superclasses
Спасибо
Здесь решение от Гильерме Бланко ссылка. Мне нравится публиковать решение вместо ссылки, которая в конечном итоге больше не сможет работать в будущем:
<?php
/** @MappedSuperclass */
class MappedSuperclassBase
{
/** @Column(type="integer") */
protected $mapped1;
/** @Column(type="string") */
protected $mapped2;
/**
* @OneToOne(targetEntity="MappedSuperclassRelated1")
* @JoinColumn(name="related1_id", referencedColumnName="id")
*/
protected $mappedRelated1;
// ... more fields and methods
}
/** @Entity */
class EntitySubClass extends MappedSuperclassBase
{
/** @Id @Column(type="integer") */
private $id;
/** @Column(type="string") */
private $name;
// ... more fields and methods
}