2014-03-01 103 views
0

此代码不起作用。有谁能够帮助我?代码是:createQueryBuilder leftJoin使用Doctrine DQL和Symfony2

class ResultRepository extends EntityRepository 
{ 
    public function findAllByUserResultVote($id_vote) 
    { 
     $query = $this->createQueryBuilder('r') 
      ->leftJoin('r.user' , 'u') 
      ->leftJoin('r.answer' , 'a') 
      ->leftJoin('r.vote' , 'v') 

      //Where idVote (Table result) == id (Table vote) 
      ->where('r.idVote = :idVote') 
      ->setParameter('idVote', $id_vote) 
      ->getQuery(); 
     return $query->getResult(); 
    } 
} 

我有一个实体用户,答案,投票,结果。

而且我有4个表:
用户:ID(主),,...
投票:ID(主),问题。 ...
答案:编号(小学),idVote,answer ...
结果: * ID *(主),ID用户(ID < - 表用户),idVote(ID < -table票),idAnswer(ID < -table答案),...

结果只包含了ID,但是我需要返回例如:
相反的: 1,6,5,3
此: 1,u.name,v.question,aansans

+0

addSelect会帮助你。花一些时间阅读文档:http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/query-builder.html。 DQL与SQL不同,你会浪费很多时间,直到你理解这些差异。 – Cerad

回答

0
  1. 您不必手动编写连接条件。这是ORM的责任。
  2. 您应该使用Vote对象而不是其where子句中的ID。

    $vote = ...; 
    
    $query = $this->createQueryBuilder('r') 
        ->leftJoin('r.user', 'u') 
        ->leftJoin('r.answer', 'a') 
        ->leftJoin('r.vote', 'v') 
        ->where('r.vote = :vote') 
        ->setParameter('vote', $vote) 
        ->getQuery(); 
    
+0

我刚刚测试过,并且我得到了错误。为什么我应该在哪里使用Vote对象而不是它的ID? r.idVote(表结果)是一个id(也许是很多结果)。而$ id_vote只有一个,唯一(表投票)。 – Zarlok

+0

什么样的错误?您应该在使用**对象模型**而不是数据库模型时使用对象而不是它们的属性。使用对象将使您的代码更加冗长,并且更易于维护。 – Crozin

+0

我不得不使用实体关系/关联? – Zarlok