2013-11-26 65 views
1

這個問題是關於從多個表,連接,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放在一起。

請幫忙, 謝謝!

回答