2014-03-01 170 views
0

此代碼不起作用。有誰能夠幫助我?代碼是:createQueryBuilder leftJoin使用Doctrine和Symfony2

class ResultRepository extends EntityRepository 
{ 
    public function findAllByUserResultVote($id_vote) 
    { 
     $query = $this->createQueryBuilder('r') 
      //associating tables... 
      ->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(主),問題,...
答:ID(主),idVote,答案...
結果:ID(主),ID用戶(ID表用戶),idVote(ID表票),idAnswer(ID表的答案),...

----- 編輯 - ---
感謝您的答案,但這不是我所做的。
結果也是一張表。而這僅包含ID,我需要回到例如:
相反的: 1,6,5,3
此: 1,u.name,v.question,a.answer

+0

我不認爲你需要所有' - > where('r.idUser = u.id')'部分,因爲連接已經在你的模式中進行,所以它知道在哪裏做。另外,你是否有實際的字段叫'idUser','idAnswer'或'idVote'? – qooplmao

回答

0
public function findAllByUserResultVote($idVote) 
{ 
    $queryBuilder = $this->createQueryBuilder('r') 

    // From your question, it looks like you only want ids 
     ->select('r.id, u.name, v.question, a.answer') 

    // join with Vote Entity 
     ->leftJoin('r.vote' , 'v') 
    // join with User Entity 
     ->leftJoin('r.user' , 'u') 
    // join with Answer Entity 
     ->leftJoin('r.answer' , 'a') 

    // where id is same as $idVote 
     ->andWhere('v.id = :id_vote') 
     ->setParameter('id_vote', $idVote); 

    return $queryBuilder 
     ->getQuery() 
     ->getResult(); 
} 
+0

感謝您的回答,我剛剛編輯過,因爲我認爲我沒有清楚解釋。我需要返回1,u.name,v.question,a.answer而不是1,6,5,3 ... – Zarlok

+0

@Zarlok你走了! – Mick