2012-04-11 24 views
6

Począwszy od wersji 2.2 Doctrine ma Paginator. Jest tylko jeden przykład w dokumentacji:Doctrine2 Paginator

<?php 
use Doctrine\ORM\Tools\Pagination\Paginator; 

$dql = "SELECT p, c FROM BlogPost p JOIN p.comments c"; 
$query = $entityManager->createQuery($dql) 
         ->setFirstResult(0) 
         ->setMaxResults(100); 

$paginator = new Paginator($query, $fetchJoin = true); 

$c = count($paginator); 
foreach ($paginator as $post) { 
    echo $post->getHeadline() . "\n"; 
} 

Nie ma nic nowego w tej klasie, ponieważ cały proces opisany w dokumentacji można zrobić z $query->getResult().

Wiem, że istnieje kilka pakietów dotyczących stronicowania, ale nie chcę instalować pakietów innych firm w tak banalnych kwestiach. Z drugiej strony nie mogę znaleźć nic na temat stronicowania doktryny2. Powinny być jakieś użyteczne metody klasy. Gdzie mogę je znaleźć? Jeśli nie, to jaki jest sens całej klasy?

Odpowiedz

3

Paginator Doctrine nie jest świadomy Symfony - jest niskiego poziomu i specyficzny dla Doctrine.

Z drugiej strony, jeśli zainstalować a 3rd party bundle, dostaniesz adaptery paginacji dla Doctrine ORM & ODM, Propel, zwykły tablic itp Otrzymasz również integracyjne Symfony i widok pomocników. Co najmniej WhiteOctoberPagerfantaBundle, którego używam, robi to wszystko.

Tak więc, chyba że korzystasz tylko z Doctrine, sugeruję, abyś ponownie rozważył swoją pozycję dotyczącą pakietu trzeciej firmy.

+4

Nie odpowiada to na pytanie, ponieważ w problemie nie ma nic specyficznego dla Symfony. Lepiej byłoby zamiast tego mieć rozwiązanie oparte tylko na doktrynie. Mam dokładnie ten sam problem i zastanawiam się, jaki jest sens klasy Paginator. –

+0

AFAICT, klasa Paginator istnieje wyłącznie w celu rozwiązania problemu, który występuje podczas próby użycia setMaxResults w zapytaniu JOINed DQL. Trąbiły mnie kiepskie projekty, ale najwidoczniej to, co wiem. >. < –