Autor | Zpráva | ||
---|---|---|---|
jik Profil |
#1 · Zasláno: 27. 3. 2014, 12:54:24
Zdravím,
docela nepolíbený OOP se hrabu s Nette. A s verzí 2.1, když se objekty typu selection staly typu read only, mám problém. Často potřebuji k datům získaným z tabulky přidat další - vypočítané. Až dosud jsem pracoval takto: $pole = $this->context->tabulka->getRecord($id); foreach ($pole as $radek) { $radek->novy_prvek = 'nazdar'; } $this->template->data = $pole; $pole = $this->context->tabulka->getRecord($id); $vystup = false; foreach ($pole as $radek) { $v_radek['polozka'] = $radek->polozka; $v_radek['novy_prvek'] = 'nazdar'; $vystup[] = $v_radek; } $this->template->data = $vystup; Děkuji za rady |
||
breeta Profil |
#2 · Zasláno: 27. 3. 2014, 17:26:27
Vybereš jeden řádek z tabulky dle id a děláš z toho pole? Napiš spíš co chceš docílit a nepopisuj jak to děláš.
jik: „Často potřebuji k datům získaným z tabulky přidat další - vypočítané.“ Fakt netuším co to znamená, nevíš jak přidávat nebo sloučit pole ... |
||
jik Profil |
#3 · Zasláno: 27. 3. 2014, 20:33:09
breeta:
příklad: v db mám sloupce číslo a podlomení, které ovšem z nějakého důvodu považuji za vhodné mít již v presenteru v podobě "cislo/podlomeni" - tedy z existujících sloupců potřebuji vytvořit další sloupec, například cislopod. Mám plno dalších podobných důvodů, bez toho se neobejdu. Proč dělám pole z řádku tabulky? Protože potřebuji do formuláře nasadit výchozí hodnoty: $this["editpozForm"]->setDefaults($def_array); |
||
joe Profil |
#4 · Zasláno: 27. 3. 2014, 21:34:55
Tady je důvod, proč tomu tak je a je logický, co objekt, to řádek z databáze, neměl bys tedy objekt upravovat tak, aby neodpovídal databázovému řádku, který představuje. V odkázané diskusi je i příklad, jak něco takového třeba řešit.
jik: „V Nette se vlastně objekty chovají kombinovaně, ale formuláře potřebují pole.“ Potřebují pole, ale předat můžeš i objekt, který implementuje ArrayAccess rozhraní a to Selection implementuje, takže pouze přímo "čisté" pole předávat nemusíš.
|
||
jik Profil |
#5 · Zasláno: 28. 3. 2014, 06:54:24
joe:
Toto je sice hezké, ale mám dojem, že je to o něčem jiném - já žádné Save, případně Update nepotřebuji, jen potřebuji k již existujícím sloupcům tabulky předávaným šabloně přidat ještě další. Tedy jak přeměnit objekt selection (tedy vlastně dotaz do databáze) na soubor dat, které budu schopen modifikovat - bez jakéhokoliv spojení s databází: $select = $this->context->tabulka->getTabulka(); $data = $select; //$data je pouze kontejnerem na data, ne dotazem $data->novy_sloupec = 'neco'; $this->template->data = $data; |
||
joe Profil |
#6 · Zasláno: 28. 3. 2014, 10:28:28
jik:
Můžeš použít něco takového $selection = model->findAll(); // vraci Selection $rows = $selection->fetchAll(); $row = $rows[1]; $rowArray = $row->toArray(); $rowArray['moje'] = 10; |
||
jik Profil |
#7 · Zasláno: 28. 3. 2014, 12:29:41
To je ono! Děkuji moc.
|
||
Časová prodleva: 4 dny
|
|||
jik Profil |
#8 · Zasláno: 1. 4. 2014, 08:33:24
joe:
Tak ne, ani v tom data kontejneru nelze data měnit: $this->a_lvs = $this->s_lv->getLvs($id)->fetchAll(); foreach ($this->a_lvs as $o_lv) { $o_lv->count = $this->context->pozemek->getPozemkyLv($o_lv->id, 'id')->count(); |
||
Časová prodleva: 10 let
|
0