获取doctrine查询中的行数

时间:2012-04-29 11:40:29

标签: sql symfony doctrine-orm

A有这样的代码:

$em = $this->getDoctrine()->getEntityManager();
    $query = $em->createQuery("SELECT p FROM AcmeBlogBundle:Publish p
         ORDER BY p.update_date DESC");

   $query->setFirstResult(($page-1)*$ads_on_page);
   $query->setMaxResults($ads_on_page);      
   $posts = $query->getResult();

现在我试图获取查询中的总行数(不依赖于setMeaResult课程)。 我尝试使用count()函数,但它不起作用......


所以我做了SELECT p, count(p.id) as p_count FROM AcmeBlogBundle:Publish p ORDER BY update_date DESC并且它有效,但我看到现在我只有一行[我认为它因为count()只返回一行]。所以我做了两个查询,如下:

$em = $this->getDoctrine()->getEntityManager();
    $query = $em->createQuery("SELECT p FROM AcmeBlogBundle:Publish p
            ORDER BY p.update_date DESC");
   $query->setFirstResult(($page-1)*$posts_on_page);
   $query->setMaxResults($posts_on_page);

   $count_query = $em->createQuery("SELECT COUNT(p.id) AS p_count FROM AcmeBlogBundle:Publish p
            ORDER BY p.update_date DESC");


   $posts = $query->getResult();
   $count = $count_query->getResult();

效果很好,但我想知道这是正确的方法吗?

2 个答案:

答案 0 :(得分:1)

是的,确实如此。第一个查询将只获得最多为setMaxResults设置的数字的记录数。第二个查询将计算查询可能返回的记录数。没有其他方法可以做两件事。

PS:如果你想建立分页,请考虑使用DoctrineExtensions。它只允许您编写一次查询(但它仍然会在下面执行两个查询)。

答案 1 :(得分:0)

Doctrine 2.2包含一个应该解决问题的分页类:http://docs.doctrine-project.org/en/latest/tutorials/pagination.html