2014-01-30 3 views
2

Doctrine 2와 Symfony를 사용합니다. 저는 Doctrine을 처음 접했고 자신의 문서에서 찾고있는 것을 찾을 수 없기 때문에 상황에 대한 지침을 찾고 있습니다. Doctrine and Multiple Entity associations

내가이 단체가 있습니다 1. 프로필 (모든 주소를 (학교가 많은 주소를 가질 수, 학교 정보) 3. 주소 2. 학교 (사람의 프로필을, 사람이 많은 주소를 가질 수), 관련 위 엔티티 중 하나에)

이전에 프로필, ProfileAddress, School, SchoolAddress가 정상적으로 작동했지만 다른 엔티티가 다운 될 수 있으므로 주소 업데이트를 위해 단일 클래스/테이블을 사용하고 싶습니다. 주소가 필요한 도로. 또한 내 주소 형식이 변경된 경우 많은 대신 하나의 클래스/테이블 만 변경하려고합니다.

내 질문은 ... 하나의 엔티티에 두 개 (또는 그 이상) 다른 엔티티를 연결할 수 있습니까? 다음은 실제 테이블에서 볼 수있는 데이터의 예제입니다.

-Profiles-

|id|fname |lname| 
| 1|John |Smith| 
| 2|Jane |Jones| 

-Schools-

|id|name    |type    | 
| 1|City College  |University  | 
| 2|Greendale  |Community College| 

-Addresses-

|id|src_id|src  |type |address1   |address2| 
| 1|  1|profiles|maling |PO BOX 555  |  | 
| 2|  1|profiles|physical|123 W. Main St. |Apt A | 
| 3|  1|schools |physical|541 University Way|  | 
| 4|  2|schools |physical|111 Winger Ave |  | 

교리와이 가능합니까? 그렇다면 어떻게? 아니면 이것을 설계 할 수있는 더 좋은 방법이 있습니까? 다른 사람들이이 상황에서 무엇을 했습니까?

+0

참조 테이블을 가진 혜택이 있습니다 거기에 일치하는 개체가 제대로 구성하는 경우 교리를 가정합니다. 엔티티가 올바르게 유지됩니다. 따라서 참조 테이블에 대한 엔티티를 작성할 필요가 없습니다. 파이처럼 쉽습니다. – geoB

답변

3

매핑 테이블이 2 개만 필요하므로 주소에 원본 열이있는 대신 profile_address 및 school_address 테이블이 필요합니다. 단방향 (편도)을 지정하여 프로필에서 주소로, 학교에서 주소로 지정해야합니다.

편집 : 사용자 역할을주는 표준 예

, 당신은 것입니다 :

/** 
* @ORM\ManyToMany(targetEntity="Role") 
* @ORM\JoinTable(name="user_role", 
*  joinColumns={@ORM\JoinColumn(name="user_id", referencedColumnName="id")}, 
*  inverseJoinColumns={@ORM\JoinColumn(name="role_id", referencedColumnName="id")} 
*) 
*/ 
protected $roles; 

지금의 당신에 대한 역할을하고 싶었 방관자 말을하자, 다른 개체를하고 싶어 말할 수 또한 다음과 같이 설정해야합니다.

/** 
* @ORM\ManyToMany(targetEntity="Role") 
* @ORM\JoinTable(name="bystander_role", 
*  joinColumns={@ORM\JoinColumn(name="bystander_id", referencedColumnName="id")}, 
*  inverseJoinColumns={@ORM\JoinColumn(name="role_id", referencedColumnName="id")} 
*) 
*/ 
protected $roles; 

+0

그게 가능하다는 것을 알게되어 기쁩니다. 내 질문은 어떻게? 문서에서 아무 것도 발견하지 못했지만 어쩌면 잘못된 위치에서보고 있습니다. 알고있는 모든 예제 또는 문서? – Bob

+0

이 예제를 게시했습니다. –