这个问题是关于从多个表、连接、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 放在一起。
请帮忙,谢谢!