これは実際にはこれらのマッピングでは不可能です。少なくとも1つは欠けている: プロジェクトはクライアントの詳細も知っているはずです。
1つのプロジェクトの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();
乾杯を。