1

是否有可能拥有一个扩展学说实体并保持它的 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);
4

1 回答 1

3

是的,这是可能的,这称为继承映射,但子类必须显式声明为@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
{
    // ...
}
于 2012-02-29T20:16:27.033 回答