我遇到了DQL查询的问题,我有实体Bar和Tip(它计算了条形图上的用户评论)。
问题是,我想显示一个如下所示的6个柱的列表:
我的问题是,即使它们位于顶部栏上,也不会显示没有提示的栏。
这是我的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();
请帮忙吗?
答案 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();