Doctrine 2.0:如何在OneToOne关系中定位实体的超类

时间:2012-05-10 20:29:56

标签: php doctrine doctrine-orm

我不是很擅长提问,但下面的代码应该是不言自明的。 我需要创建一个从类到实体的超类的OneToOne关联,它不是一个实体。

/* Not an entity */
class Superclass {
      /** 
       *@Id @Column(name="entity_id", type="integer") @GeneratedValue 
       **/
      protected $id;
}

/**
 * @Entity @Table(name="subclasses1")
 **/
class Subclass1 extends Superclass {

}

/**
 * @Entity @Table(name="subclasses2")
 **/
class Subclass2 extends Superclass {

}


/**
 * @Entity @Table(name="assoc")
 **/
class Associationclass
{
    /**
     *OneToOne(targetEntity="Superclass")
     **/
    protected $association;

    /**
     *@Column(type="string")
     **/
    protected $info;
}

问题是:如何使用OneToOne关系引用subclass1和subclass2而不使Superclass成为实体(创建新表并使用鉴别器)?

1 个答案:

答案 0 :(得分:1)

你做不到。如果你想要那种继承(你可以在关联中使用的那种),你需要在doctrine中建模继承。

该关联需要一个“targetEntity” - 就像名称所示,它必须是一个实体。

除非有充分的理由不这样做,否则请继续使您的超类成为实体,并以学说可以理解的方式设置继承。

您的超类需要成为实体的原因是因为超类及其子类将共享一个标识符。因此,使用标识符(和鉴别器),学说可以确定SuperClass#1234实际上是SubClass2。