2012-05-10 12 views
0

質問にはあまりよく似ていませんが、以下のコードは自明です。 クラスからエンティティではないエンティティのスーパークラスへのOneToOneの関連付けを作成する必要があります。Doctrine 2.0: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の両方を参照することができますか?

答えて

1

できません。その種の継承(アソシエーションで使用できる種類)が必要な場合は、教義の継承をモデル化する必要があります。

アソシエーションには「targetEntity」が必要です。これは、名前のように、エンティティでなければなりません。

非常に良い理由がない限り、スーパークラスを実体にして、教義が理解できる方法で継承を設定します。

スーパークラスとそのサブクラスが識別子を共有するため、スーパークラスがエンティティである必要がある理由は、スーパークラスとそのサブクラスが識別子を共有するためです。したがって、識別子(と弁別子)を使って、doctrineはSuperClass#1234が実際にSubClass2であることを知ることができます。

関連する問題