Я хотел бы расширить классы Entity\Base, как это сделать в Doctrine 2.1? Мои исследования показали, что всякий раз, когда кто-то сталкивается с этой проблемой, он переключается на Doctrine 1.2:) n Я использую конфигурацию yaml
Доктрина: расширение класса сущностей
Ответ 1
Doctrine 2.X Entities работают как POPOs (обычные старые объекты PHP). Чтобы обеспечить правильное расширение, Doctrine обеспечивает вас использованием концепции JPA под названием Mapped Super Classes. Идея довольно проста. Всякий раз, когда вы хотите иметь базовый класс и хотите, чтобы ваши сущности расширялись от него (я не говорю о наследовании на уровне БД), все, что вам нужно сделать, это создать свой базовый класс как MappedSuperClass.
Вот пример: http://www.doctrine-project.org/docs/orm/2.1/en/reference/inheritance-mapping.html#mapped-superclasses
Спасибо
Ответ 2
Здесь решение из ссылки Гильерме Бланко. Мне нравится иметь размещенное решение вместо ссылки, которая в конечном итоге больше не может работать в будущем:
<?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
}
Ответ 3
Если вы просто поместите несколько общих атрибутов/функций в один файл, попробуйте использовать php trait: https://www.doctrine-project.org/projects/doctrine-orm/en/2.6/tutorials/override-field-association-mappings-in -subclasses.html