Oznámení
PHP count() v šabloně nad DibiFluent
před 8 lety
- maarlin
- Člen | 207
Mám takový postřeh, faktické chování dibi, které mě popravdě trochu zmátlo a nečekal jsem ho…
V modelu/presenteru mám dotaz seskládaný skrz DibiFluent
,
tedy do šablony se asi předává DibiFluent
objekt.
Pokud zavolám standardní count()
PHP funkci nad tímto objektem,
tak se v podstatě zavolá DibiFluent::count()
metoda, což znamená, že se zabalí celý stávající dotaz se vším všudy
a nad ním se spočte SQL COUNT(*)
.
Popravdě v trochu větších aplikacích si moc nedovedu představit reálně využití té metody jako takové…
Při počítání výsledků totiž:
- většinou nepotřebuji všechny sloupce, ale obvykle jen to číslo výsledků
- Pokud to nemá vliv na počet vrácených výsledků, obvykle nepotřebuji ani připojené další tabulky
- nepotřebuji snad nikdy řadit
- nepotřebuji, resp. spíš nechci omezovat výsledky skrz OFFSET a LIMIT
Tzn. stejně je většinou potřeba COUNT()
dotaz napsat
zvlášť, eventuálně udělat nad hotovou metodou modelu něco jako toto:
$this->getArticles()->select(FALSE)->select('COUNT(*)')->orderBy(FALSE);
Editoval maarlin (19. 4. 2011 17:00)
před 7 lety
- Felix
- Nette Core | 898
Souhlasim. Taky jsem se s tim setkal. Zkusim napsat nejaky pull request, eventuelne jestli uz to nekdo ma, tak by to mohl pushnout.
před 7 lety
- Milo
- Nette Core | 1119
Počítat řádky jako subselect je ideální univerzální řešení.
Problém je s MySQL performance. Obyčejný COUNT(*)
nefunguje
u grouped selectů. Tady
jsem to řešil.