Fetch, iterace, reset na prvni prvek atd

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

Ahoj všem :-) trochu laboruji s ActiveRow v Nette\Database a potřeboval bych poradit. Výsledek dotazu přiřazuji standardně do šablony z modelu nějak takto: $this->template->news = $this->newsModel->where() přičemž v šabloně bych:

  1. potřeboval iterovat nad výsledkem dvakrát. Když si ho naklonuji přes {var $news2 = clone $news} tak Nette Database pokládá dotaz zbytečně dvakrát. Tj šiklo by se něco jako $selection->fetchReset() a projet to podruhé.
  2. na pár místech by se zase hodilo, abych mohl projet foreachem zbylé výsledky po fetchi. Tj. potřebuji třeba první řádek výsledku fetchnout a zobrazit ho nějak a zbytek foreachnout. Bohužel na výsledek nefungují funkce pro práci s poli, jak jsem zvyklý – array_shift a jeho kámoši.

Co jsem se díval do zdrojáků, tak Selection je implementuje ArrayHash a Traversable, jestli se nemýlím, takže by to asi výše uvedené mělo umět, ale moc netuším jak. Nakopnutí kamkoli mi bude přínosem :) předem díky :)

voda
Člen | 561
+
0
-

Použij na výsledek dotazu iterator_to_array.

potapnik
Člen | 127
+
0
-

Nepřijdu tím ale o možnost výpisu {$fetched->item} s tím, že budu moct vypisovat jenom jako {$fetched['item']}?

greeny
Člen | 405
+
0
-

projít to 2× foreachem nefunguje?

foreach ($selection as $row) {
	something();
}


foreach ($selection as $row) {
	somethingElse();
}
potapnik
Člen | 127
+
0
-

Na prvních několika row provedu fetch, na dalších už bych chtěl jet foreachem, ideálně array_shift, která by se naroubovala na ArrayHash, pořád mi přijde iterator_to_array dost ošlivý řešení, i když jediný ve výsledku rozumný…

greeny
Člen | 405
+
0
-

IMO máš špatnej návrh, pokud musíš vytahovat některé řádky fetchem a zbytek foreachem. Nějaký chytrý makro {first} nebo něco podobného by to nevyřešilo?