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();
它工作得很好,但我想知道它是正确的方式吗?
3条答案
按热度按时间biswetbf1#
是的。第一个查询只会得到
setMaxResults
设置的记录数。第二个查询将计算一个查询可能返回的记录数。没有其他方法可以完成两件不同的事情。PS:如果你想构建分页,考虑使用DoctrineExtensions。它只允许你写一次查询(但它仍然在下面做两个查询)。
8gsdolmq2#
Doctrine 2.2包含了一个分页类,可以解决这个问题:http://docs.doctrine-project.org/en/latest/tutorials/pagination.html
n53p2ov03#
设置最大结果不适用于一对多
示例使用子查询、连接多个链接实体、使用setMaxResults...您将获得整个查询的限制...
所以如果你想要2篇文章,你可以获取他们所有的评论。
你会有第一篇文章与2评论.
这个功能是不聪明的礼貌。