1

这个问题是关于从多个表、连接、Doctrine2、ResultSetMapping、DQL 等中选择数据的。

我有 4 张桌子:

  • 用户
  • 接触
  • 联系电话
  • 称呼

关系如图所示: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 放在一起。

请帮忙,谢谢!

4

1 回答 1

0

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

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

于 2013-11-26T14:42:45.097 回答