1

私は質問をするのがあまり得意ではありませんが、以下のコードは自明であるはずです。クラスからエンティティではないエンティティのスーパークラスへの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の両方を参照するにはどうすればよいですか?

4

1 に答える 1

1

できません。そのような継承 (関連付けで使用できる種類) が必要な場合は、ドクトリンで継承をモデル化する必要があります。

関連付けには「targetEntity」が必要です。これは、名前が示すように、エンティティである必要があります。

よほどの理由がない限り、先に進んでスーパークラスをエンティティにし、ドクトリンが理解できる方法で継承を設定してください。

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

于 2012-05-11T05:16:16.910 に答える