Symfony2& Doctrine - 获取从数据源返回的行数

时间:2011-11-22 12:32:46

标签: php symfony doctrine-orm

我的Symfony2 Repository Class中有以下代码......

$query = $this->createQueryBuilder('foo')
        ->where('foo.bar = :id')
        ->setParameter('id', $myID)
        ->getQuery();

如何获取数据库找到的行数?

提前致谢

4 个答案:

答案 0 :(得分:42)

你需要执行DQL来做你想做的事。

$query = $this->createQueryBuilder()
              ->from('foo', 'f')
              ->where('foo.bar = :id')
              ->setParameter('id', $myID)
              ->getQuery();


$total = $query->select('COUNT(f)')
               ->getQuery()
               ->getSingleScalarResult();

答案 1 :(得分:31)

我认为你可以这样做:

$query = $this->createQueryBuilder()
    ->select('COUNT(f.id)') 
    ->from('foo', 'f')
    ->where('foo.bar = :id')
    ->setParameter('id', $myID)
    ->getQuery();

$total = $query->getSingleScalarResult();

答案 2 :(得分:19)

您执行查询然后获取结果。获得结果后,您可以通过对结果执行count来获取记录数:

$results = $query->getResult();
$resultCount = count($results);

如果您关注分页,就像从总数中获取25条记录一样。然后,你有两个选择。

  • 您执行两次查询,一次获得总结果,另一次使用方法setFirstResultsetMaxResults检索25个结果。此方法setFirstResult使您可以设置偏移量和第二个setMaxResults个记录数。以下代码将为您提供25到50之间的结果,如果您按页面使用25条记录,则为第二页。

    $query->setFirstResult(25);
    $query->setMaxResults(25);

  • 您可以检查具有分页器支持的Doctrine2的doctrine扩展。这些扩展是由Doctrine2的开发人员之一完成的。您可以查看这些here

希望得到这个帮助。

的问候,
马特

答案 3 :(得分:7)

我认为这很简洁:

$qb = $repo->createQueryBuilder('entity');
$qb->select('COUNT(entity)');

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

$repo的类型为Doctrine\ORM\EntityRepository