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();
效果很好,但我想知道这是正确的方法吗?
答案 0 :(得分:1)
是的,确实如此。第一个查询将只获得最多为setMaxResults
设置的数字的记录数。第二个查询将计算查询可能返回的记录数。没有其他方法可以做两件事。
PS:如果你想建立分页,请考虑使用DoctrineExtensions。它只允许您编写一次查询(但它仍然会在下面执行两个查询)。
答案 1 :(得分:0)
Doctrine 2.2包含一个应该解决问题的分页类:http://docs.doctrine-project.org/en/latest/tutorials/pagination.html