Kdyby\Doctrine a stránkování – count query

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
Jiří Nápravník
Člen | 710
+
0
-

Používám pro sestavení dotazu QueryObjecty a pak si je fetchnu do ResultSetu a vypisu pak, na prvni pohled vse ok. Nad ResultSetem pak ještě volám applyPaginator. Problem vsak je, ze ty dotazy do databaze trvaji nad sto tisici zaznamy celkem dlouhou dobu. Kdyby to bylo ještě kvůli datům tak budiž, ale tvoří se i COUNT dotaz, který si přebírá všechny joiny a je tak zbytečně dlouhý také. Přitom kdybych dělal count ručně nepotřeboval byh tam všechyn joiny apod. Dá se nějak tenhle počet dodat „ručně“? Zkrátka, abych si napsal tu COUNT query zvlášť?

Vím, že QueryObject má i doCreateCountQuery, ale to moc problém neřeší, protože ten QueryObject používám na více místech, a jednou bych měl tu CountQuery tak a jindy onak…

jiri.pudil
Nette Blogger | 1034
+
0
-

Mno, od toho je tam právě ta metoda doCreateCountQuery. Jestli potřebuješ na různých místech jiné chování, můžeš si ho třeba nastavovat nějakým přepínačem a ten v oné metodě zohlednit.

Marek Šneberger
Člen | 130
+
+2
-

Zkus dát ->setFetchJoinCollection(FALSE) tam, kde voláš ->fetch(). Čili něco jako $this->ordersRepository->fetch($query)->setFetchJoinCollection(FALSE). Hope it helps :)

Jiří Nápravník
Člen | 710
+
0
-

FetchJoinCollection celkem pomohlo (hlavne pomohlo jeste useOutputWalkers – false – ale to uz jsem mel drive), resp. ne s tim countem, ale usetrilo to aspon dotaz:-) Ja spise mysleljeslti tam ten totalCount nejde nejak podsoupnou, pres nejaky setter, ci podobne.

Ten prepinac me taky samozrejme napadl, ale to neni uplne optimalni, kor pokud by tech variant bylo vice…