Pridani dat do vysledku z Nette\Database

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

Zdravim potreboval bych radu ohledne nasledujici situace:

Pres Nette\Database si udelam select, ktery mi vrati data v Nette\Database\Table\Selection, tyto data chci v templatu vypisovat pomoci foreach do tabulky. Do ted vse v poradku, ale z vypsanych dat chci delat jeste nake slozitejsi vypocty pro kazdy zaznam (vypocet je v metode v samostatne tride). Jde o to jakym zposobem vypoctena data priradit ke konretnim radkum z DB a vypsat je.

Moje reseni jsem udelal tak, ze si v presenteru zavolam metodu, ktera mi provede vypocty a ulozi do asociativniho pole s klicem, ktery je roven primarnimu klici z DB. Pri vypise v template jen pristupuju ke konkretnim prvkum z pole a vypisuji.

Napadlo me jeste reseni pres halper, ale nelibi se mi, ze mi tam bude v template vstupovat treba deset promenych → template bude pak neprehledny.

Je jeste nake jine, lepsi, hezci reseni? S touto situaci se pri programovani setkavam pomerne casto, tak by me zajimalo, jak nejlepe na to. :)

Predem diky.

Editoval saimons (17. 4. 2012 13:51)

uestla
Backer | 799
+
0
-

No čirou náhodou jsem to samé řešil před chvílí na anglickém fóru, tak se můžeš poohlédnout tam :-)

https://forum.nette.org/…rom-database#…

Mělo by to být to, co hledáš…

saimons
Člen | 293
+
0
-

Diky za informace je mi celkem jasne jak to funguje, ale neprisel jsem na to jak to pouzit. Protoze pokud delam v modelu select napr:

$database = new Nette\Database\Connection;
$result = $database->table('user');

Tak $result je objekt typu Nette\Database\Table\Selection, ale ja potrebuju aby byl typu Nette\Database\Table\MySelection a tam jsem mel moznost predelat metodu createRow(), ale nevim jak tohodle muzu docilit?

Editoval saimons (18. 4. 2012 11:29)

uestla
Backer | 799
+
0
-

Samozrejme, ze muzes misto volani table rovnou vytvorit svuj podedeny (kdyz uz se nekamaradis se SystemContainerem ^^):

$result = new MyDbNamespace\MySelection( 'user', $database );

Protoze metoda table() dela v podstate to same.

Editoval uestla (18. 4. 2012 18:41)