Doctrine 信条继承信条实体的php类

Doctrine 信条继承信条实体的php类,doctrine,doctrine-orm,persist,Doctrine,Doctrine Orm,Persist,有可能拥有一个php类来扩展一个条令实体并将其持久化吗 例如: /** * @Entity */ class A { /** * @ORM\ManyToMany(targetEntity="C", mappedBy="parents") */ protected $children; } class B extends A { ... } class C { /** * @ORM\ManyToMany(targetEntity="A", inversedBy

有可能拥有一个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);

是的,这是可能的,但子类必须显式声明为
@Entity
,并且其映射也必须显式定义(如果子类添加额外属性)

最常见的继承映射形式是单表继承,下面是《条令手册》中此类映射的一个示例:

名称空间MyProject\Model;
/**
*@实体
*@InheritanceType(“单表”)
*@DiscriminatorColumn(name=“discr”,type=“string”)
*@DiscriminatorMap({“person”=“person”,“employee”=“employee”})
*/
班主任
{
// ...
}
/**
*@实体
*/
类雇员扩展个人
{
// ...
}

感谢您的回答:)很遗憾,我们不能使用继承映射,因为我们需要与父类关联。继承映射不能很好地处理父类中的关联…您所说的“父类中的关联”是什么意思?请举个例子!这应该同样有效;在您的域模型中可能需要做一些工作,以保持一致性。也就是说,A::addChild()应该调用C::addParent(),反之亦然。教义不会为你带来这种魔力。但这超出了你原来问题的范围,答案是肯定的,你可以。条令文档说:单表继承有一个一般的性能考虑:如果多对一或一对一关联的目标实体是STI实体,出于性能原因,最好是继承继承权中的叶实体(即没有子类)。否则,Doctrine将无法创建此实体的代理实例,并将始终急切地加载该实体。通常这不是一个大问题,因为如果加载a或B,C将被加载。因为C有一个代理,所以不会加载任何其他内容。但在我的模式中,两个B之间也有一个一对一的关系。因此,如果我加载一个B对象,它没有任何代理,所有的B都将被加载加上所有的C。这是一个很大的性能问题。。。