Доктрина: расширение класса сущностей - PullRequest
12 голосов
/ 20 января 2012

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

Ответы [ 2 ]

19 голосов
/ 26 января 2012

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

Здесьпример: http://www.doctrine -project.org / docs / orm / 2.1 / en / reference / наследование-mapping.html # mapped-суперклассы

Спасибо

7 голосов
/ 17 сентября 2014

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

<?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
}
...