доктрина сохраняют класс php, который наследует сущность доктрины - PullRequest
1 голос
/ 29 февраля 2012

Возможно ли иметь класс php, который расширяет сущность доктрины и сохраняет ее?

пример:

/**
 * @Entity
 */
class A {
  /**
   * @ORM\ManyToMany(targetEntity="C", mappedBy="parents")
   */
  protected $children;
}

class B extends A {
...
}

class C {
  /**
   * @ORM\ManyToMany(targetEntity="A", inversedBy="children")
   */
  protected $parents;
}

$b = new B();
$em->persist($b);

1 Ответ

3 голосов
/ 01 марта 2012

Да, это возможно, это называется отображение наследования , но дочерний класс должен быть явно объявлен как @Entity, и его отображение также должно быть явно определено (если дочерний класс добавляет дополнительные свойства).

Наиболее распространенной формой отображения наследования является наследование одной таблицы , вот пример такого отображения из руководства Doctrine:

namespace MyProject\Model;

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

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