在学说中使用COUNT

时间:2016-01-28 08:34:25

标签: symfony doctrine

我的repostory类中有以下dql:

public function find2($id)
{
    return $this->createQueryBuilder('b')
        ->select('b', 'branch', 'pai', 'dri', 'COUNT(dri) AS ct')
        ->leftJoin('b.branches', 'branch')
        ->leftJoin('branch.productAllocationItems','pai')
        ->leftJoin('pai.DRItems', 'dri')
        ->where('b.id = :id')
        ->setParameter('id', $id)
        ->andWhere('ct > 1')
        ->getQuery()
        ->getResult(); 
}

我的问题是COUNT似乎没有用,我的查询有什么问题吗? 我只想根据条件返回其DRItems的实体。感谢。

我收到以下错误:

  

未找到列:1054'where子句'中的未知列'sclr0'

2 个答案:

答案 0 :(得分:1)

使用

  

- >有('ct> 1')

而不是

  

- > andWhere('ct> 1')

public function find2($id)
{
    return $this->createQueryBuilder('b')
        ->select('b', 'branch', 'pai', 'dri', 'COUNT(dri) AS ct')
        ->leftJoin('b.branches', 'branch')
        ->leftJoin('branch.productAllocationItems','pai')
        ->leftJoin('pai.DRItems', 'dri')
        ->where('b.id = :id')
        ->setParameter('id', $id)
        ->having('ct > 1')
        ->getQuery()
        ->getResult(); 
}

答案 1 :(得分:0)

您可以通过更改select声明来计算。

根据documentation,可以使用格式

但是对于count,你可以用逗号分隔的字段来实现count,就像我们在 SQL 中那样。

// Example - $qb->select('u')
// Example - $qb->select(array('u', 'p'))
// Example - $qb->select($qb->expr()->select('u', 'p'))
public function select($select = null);

更改

->select('b', 'branch', 'pai', 'dri', 'COUNT(dri) AS ct')

->select( 'b,branch, pai, dri ,COUNT(dri) AS ct')