這些映射實際上是不可能的。你至少缺少一個: 項目也應該知道clientdetails。假設你有一個項目的ID,你可以很容易地檢索公司的名字,但是根本無法找到哪個clientdetails行與該項目相關。
讓我給你一個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
所以,在查詢您將要替換GIVEN_ID
在項目的ID。現在,它會很容易發現公司的名字,因爲這是一個簡單的連接companyid
但讓我們看看其他加盟:
cd.companyid = c.id
這看起來很簡單,但實際上,映射到該公司的ID任何clientdetails將會是一場成功的比賽,因此絕對沒有保證(也沒有多少機會)您獲得了正確的客戶名稱。由於會有多個匹配項(如果您有多個客戶端映射到該公司),它將首先匹配它找到並返回該客戶端的名稱。這意味着您將始終擁有相同的客戶名稱。
但是,如果您將項目添加到Clientdetails的ManyToOne映射,您將能夠用cd.id = p.clientdetailsid
替換cd.companyid = c.id
,這將返回正確的名稱。
您還會注意到,當你正在使用doctrine2,你會做到這一點很容易像這種查詢將是無用的:
$projectId = 1; //this is an example
$project = App_Entities_Project::find($projectId);
$projectName = $project->getName();
$companyName = $project->getCompany()->getName();
$clientdetailsName = $project->getClient()->getName();
乾杯。