tiny ‘n’ smart
database layer

Odkazy: dibi | API reference

Oznámení

Omlouváme se, provoz fóra byl ukončen

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ž:

  1. většinou nepotřebuji všechny sloupce, ale obvykle jen to číslo výsledků
  2. Pokud to nemá vliv na počet vrácených výsledků, obvykle nepotřebuji ani připojené další tabulky
  3. nepotřebuji snad nikdy řadit
  4. 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.