Symfony 2 Doctrine COUNT

5

我在我的“艺术家”表中有一个名为“valideAdmin”的列,它取值为1或0。

我试图做一个简单的计算来返回表中“valideAdmin”为1的条目数量:

    $repo = $this   ->getDoctrine()
                    ->getManager()
                    ->getRepository('ProjectMainBundle:Artiste');

    $qb = $repo->createQueryBuilder('valideAdmin');
    $qb->select('COUNT(valideAdmin)');
    $qb->where('valideAdmin=1');

    $count = $qb->getQuery()->getSingleScalarResult();

    return array(
        'count' => $count
    );

但总是返回数字1...

如果没有where子句,我可以得到表格中所有条目的总数,但valideAdmin可以为0或1。我只想得到valideAdmin=1的计数。

感谢您的帮助。

2个回答

18

createQueryBuilder()的第一个参数是你想要实体采用的别名(即:在查询中用于引用实体的简短名称)。

你需要做的是为你的实体设置一个适当的别名(例如,对于Artiste可以使用a),然后使用COUNT()函数统计实体实例的数量,其中属性(而不是列)valideAdmin 的值为1:

$repo = $this   ->getDoctrine()
                ->getManager()
                ->getRepository('ProjectMainBundle:Artiste');

$qb = $repo->createQueryBuilder('a');
$qb->select('COUNT(a)');
$qb->where('a.valideAdmin = :valideAdmin');
$qb->setParameter('valideAdmin', 1);

$count = $qb->getQuery()->getSingleScalarResult();

请记住DQL是在实体上运行查询的。您编写的DQL然后被翻译成SQL,以对底层数据源进行查询。


0

此外,您可以获取所有日期,然后在PHP中使用COUNT函数。这种方法有一个优点,您不必使用复杂的查询,而是可以通过计数列获得所有信息。

$repositoryArtiste = $this->getDoctrine()
            ->getRepository('ProjectMainBundle:Artiste');
        $queryArtiste=   $repositoryArtiste->createQueryBuilder('a')
            ->Where('a.valideAdmin = :valideAdmin')
            ->setParameter('valideAdmin',1)
            ->getQuery();
        $Artiste = $queryArtiste->getResult();
        var_dump(count($Artiste));

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接