Наследование одной таблицы - карта дискриминатора - PullRequest
0 голосов
/ 05 января 2012

Мне нужно создать формулу для DiscriminatorMap в моем классе, потому что у меня много классов, и я не могу различить каждый из них.

Диск может быть названием класса.

это возможно? (с аннотацией, xml или другим)

/**
* @ORM\Entity
* @ORM\InheritanceType("SINGLE_TABLE")
* @ORM\DiscriminatorColumn(name="discr", type="string")
* @ORM\DiscriminatorMap({"MidUpperArmCircumference" = MidUpperArmCircumference", "KneeHeight" = "KneeHeight"})
*/

спасибо.

Ответы [ 3 ]

6 голосов
/ 24 апреля 2013

Посмотрите эту ссылку, может быть, она вам поможет.

https://medium.com/@jasperkuperus/defining-discriminator-maps-at-child-level-in-doctrine-2-1cd2ded95ffb

2 голосов
/ 25 июня 2013

Я просто пропустил аннотацию DiscriminatorMap, и Doctrine автоматически использовало имя класса щита в качестве дискриминатора:

/**
 * @ORM\Entity()
 * @ORM\InheritanceType("JOINED")
 * @ORM\DiscriminatorColumn(name="type", type="string")
 */
abstract class AbstractContent
{
    /**
     * @var integer
     *
     * @ORM\Id
     * @ORM\Column(type="integer")
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;
}

/**
 * @ORM\Entity()
 */
class Page extends AbstractContent
{
}

Теперь, когда я создаю новую Page() Doctrine, создается AbstractContent иPage с FK для AbstractContent и для атрибута AbstractContent 'type равным page.

Это идеально, поскольку позволяет генерировать столько подклассов, сколько вам нужно, даже в другихСвязки без вашего суперкласса (в моем случае AbstractContent) не нужно знать о них.

Но имейте в виду, что пока это официально не задокументировано.Протестировано с Doctrine ORM 2.3.

0 голосов
/ 04 июля 2017

Это старый вопрос. Доктрина довольно хорошо поддерживает наследование одной таблицы. Приведенный ниже пример взят из официальных документов

<?php
namespace MyProject\Model;

/**
 * @Entity
 * @InheritanceType("SINGLE_TABLE")
 * @DiscriminatorColumn(name="discr", type="string")
 * @DiscriminatorMap({"person" = "Person", "employee" = "Employee"})
 */
class Person
{
    // ...
}

/**
 * @Entity
 */
class Employee extends Person
{
    // ...
}

Подробнее об этом здесь

...