2014-06-16 32 views
0

我有一个DQL查询问题,我有和实体栏和提示(它在条上计数用户评论)。返回按Symfony和DQL的联合表中的记录数排序的记录

的问题是,我想说明的6条列表排序,像这样:第一

  1. 热门酒吧(在酒吧实体领域的地位)
  2. 提示数

我的问题是,即使他们在顶栏上,没有提示的酒吧也不会显示。

这是我的DQL查询。

$qb = $this->createQuerybuilder($this->getAlias()); 

     $qb 
      ->select($this->getAlias().", COUNT(tp) AS HIDDEN nbTips") 
      ->leftjoin($this->getAlias().'.tips', 'tp') 
      ->where($qb->expr()->eq($this->getAlias().'.onTop', $qb->expr()->literal(true))) 
      ->andWhere($qb->expr()->eq($this->getAlias().'.status', $qb->expr()->literal(Bar::BAR_STATUS_ENABLED_VALUE))) 
      ->andWhere($qb->expr()->eq('tp.status', $qb->expr()->literal(1))) 
      ->groupBy($this->getAlias()) 
      ->orderBy($this->getAlias().'.onTop', 'DESC') 
      ->addOrderBy('nbTips', 'DESC') 
      ->setMaxResults(6) 
     ; 

     return $qb->getQuery()->getResult(); 

请帮忙吗?

+1

您只能使用'where'一次。之后使用'andWhere'。 – dmnptr

+0

是的第二个地方是评论我删除了评论,当我把它粘贴在这里,问题不是来自那不幸的地方,谢谢你的remarque。 – Fanopsis

+1

尝试将tp.status移动到像' - > leftjoin($ this-> getAlias()。'tips','tp','WITH','tp.status',$ qb-> expr( ) - >文字(1))' – qooplmao

回答

2

我认为这个问题是这样的一个的副本:SQL Server LEFT JOIN and WHERE clause

酒吧,没有提示是不是在你的查询提示,因为所示必须有1

状态你应该做这样的查询(重要的部分是左连接):

$qb = $this->createQuerybuilder($this->getAlias());  
    $qb 
     ->select($this->getAlias().", COUNT(tp) AS HIDDEN nbTips") 
     ->leftjoin($this->getAlias().'.tips', 'tp', 'WITH', 'tp.status ='. $qb->expr()->literal(1)) 
     ->where($qb->expr()->eq($this->getAlias().'.onTop', $qb->expr()->literal(true))) 
     ->andWhere($qb->expr()->eq($this->getAlias().'.status', $qb->expr()->literal(Bar::BAR_STATUS_ENABLED_VALUE))) 
     ->groupBy($this->getAlias()) 
     ->orderBy($this->getAlias().'.onTop', 'DESC') 
     ->addOrderBy('nbTips', 'DESC') 
     ->setMaxResults(6) 
    ; 

    return $qb->getQuery()->getResult(); 
+0

感谢它的工作:D – Fanopsis

+0

非常感谢您的投票! – HypeR