2012-03-11 64 views
1

我有三個實體:UserAnswerQuestionSymfony - 使用Outer Joins與Doctrine ORM

UserAnswerAnswer和和Question之間的多對一關係之間的一對多關係。基本上,特定的用戶可以選擇回答一堆問題。

我試圖在ORM的世界來完成的檢索針對特定用戶的所有問題及其相關答案。關鍵部分是用戶可能沒有回答特定的問題,但我仍然想要得到這個問題(用空答案)。

我的Answer實體具有映射到User實體的'用戶'字段,該實體由User實體內的「答案」字段反轉。如果我在User實體中使用此「答案」字段,則只會獲得用戶實際回答的問題/答案對。我沒有得到問題,用戶有而不是回答。

通常情況下,使用原始SQL,這將涉及到一個簡單的「左外連接」我的問題和回答表之間,但我想這對使用學說的ORM來完成。有什麼建議麼?我對ORM的世界很陌生。

+0

將解決方案移至新答案,並「接受」(綠色勾號)! :) – biziclop 2012-03-11 08:39:41

回答

2

我做到了!具體方法如下:

我在這包含了所有的答案,從所有用戶中,針對特定的問題我Question實體創建一個字段;其映射關係到一個OneToMany關係到Answer實體。然後,以確保我們限制列表中的答案對我創建了一個自定義存儲庫我Question實體,創建了以下功能的特定用戶:

public function findAllJoinedToAnswer($user) 
{ 
    $query = $this->getEntityManager() 
     ->createQuery(' 
      SELECT q, a 
      FROM Bundle:Question q 
      LEFT JOIN q.answers a 
      WITH a.user = :user' 
     )->setParameter('user', $user); 

    try{ 
     return $query->getResult(); 
    }catch (\Doctrine\ORM\NoResultException $e) { 
     return null; 
    } 
} 

只是通過在User實體的實例,瞧!