这些映射实际上是不可能的。你至少缺少一个: 项目也应该知道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();
干杯。