Доктрина: расширение класса сущностей

Я хотел бы расширить классы 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
}