symfony 获取条令查询的行数

but5z9lq  于 2023-03-13  发布在  其他
关注(0)|答案(3)|浏览(140)

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

它工作得很好,但我想知道它是正确的方式吗?

biswetbf

biswetbf1#

是的。第一个查询只会得到setMaxResults设置的记录数。第二个查询将计算一个查询可能返回的记录数。没有其他方法可以完成两件不同的事情。
PS:如果你想构建分页,考虑使用DoctrineExtensions。它只允许你写一次查询(但它仍然在下面做两个查询)。

8gsdolmq

8gsdolmq2#

Doctrine 2.2包含了一个分页类,可以解决这个问题:http://docs.doctrine-project.org/en/latest/tutorials/pagination.html

n53p2ov0

n53p2ov03#

设置最大结果不适用于一对多
示例使用子查询、连接多个链接实体、使用setMaxResults...您将获得整个查询的限制...
所以如果你想要2篇文章,你可以获取他们所有的评论。
你会有第一篇文章与2评论.
这个功能是不聪明的礼貌。

相关问题