2012-12-05 16 views
5

Chciałbym użyć Doctrine ORM i metody stronicowania w Symfony. KnpPaginatorBundle wygląda proste i łatwe w użyciu. Korzystam również z repozytoriów Doctrine, ponieważ zapytania można łatwo ponownie wykorzystać i przetestować.Jak mogę efektywnie używać paginacji z doktryną w Symfony 2?

Ten pakiet działa tak, jak inne, które znalazłem. Potrzebny jest program budujący zapytania jako parametr. Czy istnieje lepszy sposób, aby to zrobić, niż nadanie funkcji każdego z repozytoriów paginatorowi jako parametrowi (lub zeru)? Nie chcę stronicować każdego wyniku zapytania, więc nie sądzę, że opisane rozwiązanie jest najlepsze i szukam sugestii.

+3

Pod względem wydajności lepiej jest dokonać paginacji wyników na poziomie bazy danych, dzięki czemu można uniknąć narzutu mapowania wyników na obiekty, zmniejszenia ruchu sieciowego i serwer bazy danych nie będzie musiał odczytywać/filtrować wielu rekordów. Nie jestem pewien, jak działa ten pakiet, ale możesz sprawdzić, jakie zapytania zostaną wykonane i sprawdzić, czy paginacja ma miejsce w samym zapytaniu. Jeśli tak, to dobrze jest iść. Jeśli nie chcesz wielokrotnie tworzyć tych samych zapytań, zdefiniuj je w repozytorium http://symfony.com/doc/2.0/book/doctrine.html#custom-repository-classes – Xocoatzin

+0

Zapomniałem wspomnieć, jeśli pisząc na poziomie bazy danych, będziesz musiał policzyć wszystkie rekordy, aby obliczyć ile stron tam jest. Możesz użyć do tego pamięci podręcznej lub śledzić długość swojej tabeli w inny sposób, aby tego uniknąć. – Xocoatzin

+0

Pakiety paginacji na poziomie bazy danych za pomocą https://github.com/KnpLabs/knp-components –

Odpowiedz