2010-12-27 6 views
0

나는 다음과 같은 데이터베이스 설정을 가지고 :Doctrine2 - 하나 개의 필드에 여러 관계

Tag (Integer id) 
ItemTag (Integer id, Integer tag_id, Integer item_id, Integer item_type) 
Artwork (Integer id) 
Photo (Integer id) 
나는 아래

class ItemTag { 
/** 
* @Id @GeneratedValue 
* @Column(type="integer") 
*/ 
private $id; 

/** 
* @Column(type="integer") 
*/ 
private $item_type; 

/** 
* @ManyToOne(targetEntity="Artwork") 
* @JoinColumn(name="item_id", referencedColumnName="id") 
*/ 
private $artwork; 

/** 
* @ManyToOne(targetEntity="Photo") 
* @JoinColumn(name="item_id", referencedColumnName="id") 
*/ 
private $photo; 

/** 
* @ManyToOne(targetEntity="Tag") 
*/ 
private $tag; 
} 

등 아트 워크 ID와 사진이 부착 된 신분증 모두 ItemTag에 ITEM_ID 필드를 사용하여 시도

위의 설정은 "사진 항목"을 저장하려고하면 오류가 발생하지 않고 잘 작동하지만 "아트웍 항목"을 저장할 때 item_id가 NULL입니다.

두 관계를 단일 item_id 필드에 저장할 수있는 방법이 있습니까?

답변

1

예, 상속을 사용할 수 있습니다.

추상 클래스 "항목"을 정의하고 사진 및 아트웍을 모두 확장 할 수 있습니다.

http://www.doctrine-project.org/docs/orm/2.0/en/reference/inheritance-mapping.html

이것은 당신이 약간 있지만 스키마를 변경해야합니다.

+0

감사합니다. 이것은 정확하게 내가 찾고있는 것 같습니다. 그러나 db 변경이 필요한지 확실하지 않습니다. 나는 예제를 따라했으나 ItemTag $ item 속성에서 다음과 같이 설정하면 항목 (수퍼 클래스)에 누락 된 열 "id"에 대해 불만을 표시합니다. @ManyToOne (targetEntity = "Item") @JoinColumn (name = "item_id", referencedColumnName = "id") – YiSh

관련 문제