Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [Symfony]2 Jaki paginator ?
peter13135
post
Post #1





Grupa: Zarejestrowani
Postów: 1 447
Pomógł: 191
Dołączył: 26.03.2008

Ostrzeżenie: (0%)
-----


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ę ?
Go to the top of the page
+Quote Post
m44
post
Post #2





Grupa: Zarejestrowani
Postów: 63
Pomógł: 10
Dołączył: 16.11.2008

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
marcio
post
Post #3





Grupa: Zarejestrowani
Postów: 2 291
Pomógł: 156
Dołączył: 23.09.2007
Skąd: ITALY-MILAN

Ostrzeżenie: (10%)
X----


Najlepiej taki paginator zrobic sobie jako rozszerzenie twig-a i wywolywac go w widoku.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 23.08.2025 - 12:17