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


Я хотел бы расширить классы Entity\Base, как это сделать в Доктрине 2.1? Мое исследование показало, что всякий раз, когда кто-то сталкивается с проблемой, связанной с этим, он переключается на доктрину 1.2:)n Я использую конфигурацию yaml

Author: Alex Hurst, 2012-01-20

2 answers

Доктрина 2.Сущности X работают как POPO (Простые старые объекты PHP). Для правильного расширения Доктрина заставляет вас использовать концепцию JPA, называемую Отображенными суперклассами. Идея довольно проста. Всякий раз, когда вы хотите иметь базовый класс и хотите, чтобы ваши сущности расширялись от него (я не говорю о наследовании на уровне БД), все, что вам нужно сделать, это создать свой базовый класс как MappedSuperclass.

Вот пример: http://www.doctrine-project.org/docs/orm/2.1/en/reference/inheritance-mapping.html#mapped-superclasses

Спасибо

 18
Author: Guilherme Blanco, 2013-07-02 15:50:37

Здесь решение от Гильерме Бланко ссылка. Мне нравится публиковать решение вместо ссылки, которая в конечном итоге больше не сможет работать в будущем:

<?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
}
 5
Author: MartinVonMartinsgrün, 2017-11-23 19:54:59