[英]Doctrine 2.0: How to target an entity's superclass in a OneToOne relationship
我不太会问问题,但是下面的代码应该是不言自明的。 我需要创建一个从类到不是实体的实体的超类的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关系引用子类1和子类2?
你不能 如果您想要这种继承(可以在关联中使用的那种),则需要在学说中对继承建模。
关联需要一个“ targetEntity”-就像名称所示,它必须是一个实体。
除非有很好的理由,否则,继续使您的超类成为一个实体,并以一种学说可以理解的方式建立继承。
您的超类需要成为一个实体的原因是因为该超类及其子类将共享一个标识符。 因此,有了标识符(和区分符),该学说便可以确定SuperClass#1234实际上是SubClass2。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.