1

次のようなコードがあります。

$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ましたが、今は1行しかないことがわかります[1行count()しか返さないからだと思います]。そこで、次のように 2 つのクエリを実行しました。

$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ます。2 番目のクエリは、クエリが返すレコード数をカウントします。2 つの異なることを行う別の方法はありません。

PS: ページネーションを構築したい場合は、DoctrineExtensionsの使用を検討してください。クエリを 1 回だけ記述できます (ただし、その下で 2 つのクエリを実行できます)。

于 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 に答える