Kdyby\Doctrine a stránkování – count query
- Jiří Nápravník
- Člen | 710
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
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
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
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…