這個問題是關於從多個表,連接,Doctrine2,ResultSetMapping,DQL等類似的東西中選擇數據。Doctrine2 - 從多個沒有直接關係的表中選擇
我有4個表:http://i.stack.imgur.com/762Jw.png
每個用戶可以:
- 用戶
- 接觸
- CONTACT_PHONE
- 呼叫
隨着關係的圖像上所顯示有很多聯繫人,每個聯繫人可以有多個電話,每個用戶可以有很多來自/從他的聯繫人的電話。就像在現實世界中一樣......爲了清晰起見,我限制了每個表中的字段數量。
所以我的問題是,我不知道在顯示特定用戶的呼叫列表時,如何將呼叫號碼映射到聯繫人姓名。
如果我想列出的用戶的所有呼叫我做的:
$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放在一起。
請幫忙, 謝謝!