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

Mat*_*att 31 php symfony doctrine-orm

我的Symfony2存储库类中有以下代码...

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

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

提前致谢

Reu*_*ven 42

您需要执行DQL来执行您想要的操作.

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


$total = $query->select('COUNT(f)')
               ->getQuery()
               ->getSingleScalarResult();
Run Code Online (Sandbox Code Playgroud)

  • 这是一个糟糕的解决方案+它在较新的Symfony2中不起作用 - 请改用下面的答案. (5认同)

小智 33

我想你可以这样做:

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

$total = $query->getSingleScalarResult();
Run Code Online (Sandbox Code Playgroud)


Mat*_*att 19

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

$results = $query->getResult();
$resultCount = count($results);
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

希望这有帮助.

问候,
马特

  • 对于count部分,@ Reuven的答案要好一些,因为它使用数据库管理器的内部`COUNT`函数.它更好,因为结果不会转移到计数.我的其他评论仍然适用. (2认同)

Cas*_*sey 7

我认为这是简洁的:

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

$count = $qb->getQuery()->getSingleScalarResult();
Run Code Online (Sandbox Code Playgroud)

哪种$repo类型Doctrine\ORM\EntityRepository