Jak donutit Nette Database aby se znovu podíval do databáze
- joseff
- Člen | 233
Zdravím, potřeboval bych donutit Nette database aby se znovu podívala do databáze. Tedy posloupnost operací je takováto:
- natáhnu nějaký řádek (ActiveRow)
- udělám (úplně od jinud) úpravu tohoto řádku.
- znovu se zaptám na ten stejný řádek … zde nastane problém, vratí se mi totiž původní nezměněný řádek.
Věděl by někdo jak na to? Díky
- ViPEr*CZ*
- Člen | 817
No jestli se nepletu, tak pak to vypíše to samé jako před updatem… protože to pole je již naplněné a update dělá jen update a ne znovunačtení dat. Je tam potřeba si znovu zavolat select. I když v tudle chvíli je to zbytečné, když vím, že mi to vrátí title, kterej jsem před chvílí updatoval.
- Filip Procházka
- Moderator | 4668
Můžeš udělat tohle
$row = $databse->table('content')->get(1);
$row->title = 'new title';
$row->update();
dump($row->title);
Editoval HosipLan (17. 4. 2012 14:11)
- joseff
- Člen | 233
Zdravím, stále se mi nedaří donutit nette database aby se znovu podívalo do databáze. Nevítě někdo jak na to, prostě upravím nějaký řádek v DB a pak chci získat tan nový řádek s novými daty. Už si nevím rady jak této znalivě jednoduché akce dosáhnout.
Díky za rady
@HosipLan: To by asi fungovalo, ale co když chci updatovat 20 položek v jedné ActiveRow?
@ViPEr*CZ To je právě ten problém. Chtělo by aby
ActiveRow měla metodu reload(), to by bylo super!
Nepřijde mi ideální po každém updatu volat
$contentRow = $this->connection->table('content')->get($contentRow->id)
- pawouk
- Člen | 172
@juzna.cz
To určitě fungovat bude, ale mě tam ten poslední řádek nějak nesedí, tan
tam podle mého názoru prostě nepatří a je tam jen kvůli nedokonalosti
funkce update (dle mého názrou) a je to nepotřebný dotaz do db. Já jsem
s tím také chvíli bojoval stejně jako joseff, nakonec jsem si přepsal
update a je to bez problému. Možná by stálo za to to takto zanést
do nette:
Class ActiveRow{
public function update($data = NULL){
if($data){
foreach ($data as $name=>$value){
$this->$name = $value;
}
}
return parent::update();
}
}
- bojovyletoun
- Člen | 667
Takouvouhle úpravu jsem si skutečně udělal
jako experiment, ale nepoužívám ho. Možnost je samozřejmě upravit property
a následně update(void), jak píše hosiplan. Ale je třeba taky počítat
s tím, že hodnota nemusí být jen řetězec/číslo/datetime/blob…, ale
může to být i SQL ('rand()'
, 'visits +1'
), pak je
nutné data znovu přečíst.
- vvoody
- Člen | 910
joseff napsal(a):
$row = $databse->table('content')->get(1); $row->update(array('title', 'new title')); dump($row->title);
Toto nevypise „new title“;
Proc?
pozrel si sa do db (phpmyadmin/adminer/…) ci tam ta zmena nastala?
Myslim ze ked to pole zapises spravne tak to pojde.
$row = $databse->table('content')->get(1);
$row->update(array('title'=>'new title')); // sipka namiesto ciarky
dump($row->title);