사실 이러한 매핑에서는 불가능합니다. 적어도 하나는 부족합니다. 프로젝트는 clientdetails도 알아야합니다.
하나의 프로젝트 ID가 있으면 쉽게 회사 이름을 검색 할 수 있지만 해당 프로젝트와 관련된 클라이언트 세부 정보 행을 찾을 수있는 방법은 없습니다.
내가 당신에게 설명해 도움이 될 것입니다 SQL SELECT를 들어 보겠습니다 :
SELECT p.name, c.name, cd.name FROM project p, company c, clientdetails cd WHERE p.id = GIVEN_ID AND p.companyid = c.id AND cd.companyid = c.id
그래서, 그 쿼리에 프로젝트의 ID와 GIVEN_ID
을 대체 할 것이다. 이것은 간단한 companyid
에 가입하지만의 다른 살펴 보자이기 때문에 지금은 회사의 이름을 쉽게 찾을 수있을 것입니다 가입 :
cd.companyid = c.id
그것은 간단하게 보이지만 사실,이 회사의 ID에 매핑되는 모든 clientdetails 성공적인 경기가 될 것이므로 올바른 고객 이름을 얻을 수 있다는 보장은 없습니다 (많은 기회가 아님). 둘 이상의 일치 항목이 있으므로 (둘 이상의 클라이언트가이 회사에 매핑 된 경우) 먼저 일치하는 클라이언트 이름을 찾아서 반환합니다. 즉, 항상 동일한 고객 이름을 갖게됩니다.
그러나 Project에서 Clientdetails로 ManyToOne 매핑을 추가하면 cd.companyid = c.id
을 cd.id = p.clientdetailsid
으로 바꿀 수 있으며 올바른 이름을 반환합니다.
당신은 또한 당신이 그렇게 쉽게 할 것처럼 doctrine2 사용하는 경우 쿼리 이런 종류의 쓸모가있을 것이라는 점을 알 수 있습니다 :
$projectId = 1; //this is an example
$project = App_Entities_Project::find($projectId);
$projectName = $project->getName();
$companyName = $project->getCompany()->getName();
$clientdetailsName = $project->getClient()->getName();
건배.