1

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();

它运作良好,但我想知道这是正确的方法吗?

4

2 回答 2

1

是的。第一个查询将仅获取不超过使用 设置的数量的记录数setMaxResults。第二个查询将计算一个查询可能返回的记录数。没有其他方法可以做两件不同的事情。

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

于 2012-04-29T21:17:35.253 回答
0

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

于 2013-07-13T23:50:54.553 回答