Doctrine2 - 从多个表中选择,没有直接关系

时间:2013-11-26 14:24:30

标签: php mysql sql doctrine-orm sqlresultsetmapping

这个问题是关于从多个表,连接,Doctrine2,ResultSetMapping,DQL和这些东西中选择数据。

我有4张桌子:

  • 用户
  • 接触
  • CONTACT_PHONE
  • 呼叫

图片中显示关系:http://i.stack.imgur.com/762Jw.png

每个用户都可以拥有多个联系人,每个联系人都可以拥有多个电话,每个用户可以与他的联系人进行多次通话。就像在现实世界中一样......为了清晰起见,我限制了每个表格中的字段数量。

所以我的问题是,在显示特定用户的呼叫列表时,我不知道如何将呼叫号码映射到联系人姓名。

如果我要列出用户 1 的所有来电,我会这样做:

    $callRepository = $this->getDoctrine()->getRepository('MyBundle:Call');
    $calls = $callRepository->findAll(array('user' => 1));

但是这只会给我这个用​​户的所有调用列表,并且不会将数字(call.number)与名称(contact.name)相关联。

我可以通过此查询使用纯SQL实现我想要的目标:

SELECT
    c.number,
    contact.name
FROM
     `call` c 
JOIN contact_phone cp ON 
    cp.number = c.number 
JOIN contact ON 
    contact.id = cp.contact_id 
WHERE
    c.user_id = contact.user_id
    AND c.user_id = 1

请注意,我不想选择所有调用(使用SQL),然后使用PHP层中的另一个查询将数字映射到名称,因为这样我将无法按名称搜索调用。

我想在这种情况下ResultSetMapping可以帮助我但是我没有把SQL查询和ResultSetMapping放在一起的运气。

请帮忙, 谢谢!

1 个答案:

答案 0 :(得分:0)

据我所知,您可以使用以下方法实现。请转到页面底部。你可以找到加入...尝试一次..

http://docs.doctrine-project.org/projects/doctrine1/en/latest/en/manual/dql-doctrine-query-language.html