2012-03-11 73 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实体的实例,瞧!