detekce prvního/posledního cyklu foreach v presenteru

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
Webster.K
Člen | 212
+
0
-

Zdravím všechny, už nějakou dobu řeším jeden problém, který se týká foreach a detekci prvního/posledního průchodu. Zkusím přesně objasnit co mi nefunguje:

Mám v presenteru kod na získání dat z databaze:

$rows = $this->database->query("SELECT date, count(id) as pocet, name FROM tableName GROUP BY name, datum ORDER BY datum, id ASC");

A hned za ním:

foreach ($rows as $value) {
	//obsah cyklu
}

Můj problém je ale v tom, že nejsem schopen detekovat, poslední průchod polem… napadlo mě udělat něco jako

$pocet = count($rows);

a dát to před foreach a ale v proměnný $pocet mám vždy 1 i když foreach jede treba 10×. Existuje v nette na to nějaká funkce? Nebo cokoliv? Našel jsem pro latte šablonu isFirst/isLast, ale tím to končí. Dokázal by mi někdo poradit?

Oli
Člen | 1215
+
0
-

Být tebou, naučil bych se používat nette database table, je to mnohem příjemnější než psát SQL dotazy. Nicméně, query vrací ResultSet a ten má metodu GetRowCount a to je asi to co chceš.

Webster.K
Člen | 212
+
0
-

Děkuji za odpověď :) je to přesně to, co jsem hledal :) Co se nette database table týče, používám to, nicméně jsem nepříšel uplně na to jak to použít když potřebuju data z více než jedné tabulky :/ a příklad v příspěvku výše byl zjednodušen :) Ještě jednou děkuji.

CZechBoY
Člen | 3608
+
+2
-

Můžeš použít třeba Nette\Iterators\CachingIterator https://api.nette.org/…terator.html, který má metody isLast(), isFirst().