【问题标题】:createQueryBuilder leftJoin using Doctrine and Symfony2createQueryBuilder leftJoin 使用 Doctrine 和 Symfony2
【发布时间】:2014-03-01 01:04:45
【问题描述】:

此代码不起作用。有谁能够帮我?代码是:

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(主要),idUser(id表用户),idVote(id表投票),idAnswer(id表答案),...

-----编辑----
感谢您的回答,但这不是我的工作。
结果也是一个表。这仅包含 id 并且我需要返回例如:
而不是: 1, 6, 5, 3
This: 1, u.name, v.question, a.answer

【问题讨论】:

  • 我认为您不需要所有 ->where('r.idUser = u.id') 部分,因为连接已经在您的模式中进行,因此它知道在哪里进行。另外,您是否有名为idUseridAnsweridVote 的实际字段?

标签: php mysql sql symfony doctrine-orm


【解决方案1】:
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();
 }

【讨论】:

  • 感谢您的回答,我刚刚编辑,因为我认为我没有解释清楚。我需要返回 1、u.name、v.question、a.answer 而不是 1、6、5、3...
  • @Zarlok 你去!
猜你喜欢
  • 1970-01-01
  • 2014-09-13
  • 1970-01-01
  • 2020-08-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多