Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [Symfony]2 Jaki paginator ?
Forum PHP.pl > Forum > PHP > Frameworki
peter13135
Do tej pory używałem knpPanginatora ( https://github.com/KnpLabs/KnpPaginatorBundle ). Jednak do aktualnego zadania wydaje się być nieoptymalny, lub po prostu nie potrafię go optymalnie wykorzystać.

Załóżmy, że mam klasę Category i Product taka jak tutaj : http://symfony.com/doc/current/book/doctri...ps-associations .



  1. $em = $this->get('doctrine.orm.entity_manager');
  2. $dql = "SELECT a FROM VendorBlogBundle:Article a";
  3. $query = $em->createQuery($dql);
  4.  
  5. $paginator = $this->get('knp_paginator');
  6. $pagination = $paginator->paginate(
  7. $query,
  8. $this->get('request')->query->get('page', 1)/*page number*/,
  9. 10/*limit per page*/
  10. );

Ten kod generuje o ile dobrze pamiętam 3 zapytania
1. liczy ile jest rekordów
2. pobiera id rekordów, które mają być pobrane
3. pobiera rekordy, których id zostały pobrane w poprzednim zapytaniu

Dziwi mnie, czemu 2 i 3 zapytanie nie zostały "skumulowane" do jednego.

Gdyby moje zapytanie było bardziej skomplikowane, np. miało jakiegoś join, np taki jak w example:
  1. '
  2. SELECT p, c FROM AcmeStoreBundle:Product p
  3. JOIN p.category c
  4. WHERE p.id = :id'


to pierwsze zapytanie wyglądało by tak:
  1. SELECT count(DISTINCT p) FROM AcmeStoreBundle:Product p
  2. JOIN p.category c
  3. WHERE p.id = :id'

Co jest niepotrzebne, wystarczy dać samo :
  1. SELECT count(p.id) FROM AcmeStoreBundle:Product p

Bo wynik będzie ten sam, a czas wykonania kilkanaście razy krótszy.


Dlatego ten sposób paginacji odpada.
Czy mogę poprosić was o podsunięcie mi innych pomysłów na paginację ?
m44
KnpPaginatorBundle korzysta z knp-components. Zobacz sobie po czym dziedziczy SlidingPagination.
Możesz napisać swój paginator i skonfigurować go jako jeden z serwisów.
marcio
Najlepiej taki paginator zrobic sobie jako rozszerzenie twig-a i wywolywac go w widoku.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.