返回按Symfony和DQL中的联合表中的记录数排序的记录

时间:2014-06-16 15:03:04

标签: symfony doctrine-orm dql

我遇到了DQL查询的问题,我有实体Bar和Tip(它计算了条形图上的用户评论)。

问题是,我想显示一个如下所示的6个柱的列表:

  1. 首先是顶栏(Bar实体中的字段状态)
  2. 提示数量
  3. 我的问题是,即使它们位于顶部栏上,也不会显示没有提示的栏。

    这是我的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 个答案:

答案 0 :(得分:2)

我认为这个问题与此问题重复:SQL Server LEFT JOIN and WHERE clause

未显示没有提示的条形码,因为在您的查询提示中,提示的状态必须为1。

你应该这样做一个查询(重要部分是leftjoin):

    $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();