2012-05-10 2 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; 
} 

질문 : 내가 슈퍼 클래스 엔터티 (새 테이블을 생성하고 판별 기 사용)하지 않고 subclass1와 OneToOne 관계를 사용하여 subclass2 모두를 참조 할 수 있습니까?

답변

1

수 없습니다. 그런 종류의 상속 (협회에서 사용할 수있는 종류)을 원한다면 교리에서 상속을 모델링해야합니다.

협회에는 "targetEntity"가 필요합니다. 이름에서 알 수 있듯이 엔티티 여야합니다.

아주 좋은 이유가 없다면, 당신의 수퍼 클래스를 실체로 만들고, 교리가 이해할 수있는 방식으로 상속을 설정하십시오.

수퍼 클래스가 엔티티 여야하는 이유는 수퍼 클래스와 그 서브 클래스가 식별자를 공유하기 때문입니다. 그래서 식별자 (그리고 discriminator)로, 교리는 SuperClass # 1234가 실제로 SubClass2라는 것을 알 수 있습니다.

관련 문제