jak updateovat výsledek přes PDO query?
- Hafran
- Člen | 121
Zdar,
mám složitý dotaz a nevhodnou strukturu databáze(starší projekt), takže
abych vytáhnul data použiji raději normální query, místo
předpisového NDB:
$result = this->db->query();
A teď bych chtěl aby všem těmhle řádkům byla nakonci updateovaná
nějaká maličkost(počítadlo, čas, pořadí):
něco jako
$this->db->result->update();
je mi jasný, že můžu fetchovat id a přes nějakej foreach to updateovat, ale přemýšlím jak to udělat elegantně a nenáročně, když už to Nette používám. :/
- Ot@s
- Backer | 476
Elijen napsal(a):
Na update už můžeš použít Nette\Database např. takto (do pole $ids si nejprve dát id záznamů, které chceš updatovat):
$this->db->table("tabulka")->where("id", $ids)->update(array("sloupec" => "hodnota"));
To tazatel asi ví. Bohužel z query()
objekt pro update
neuděláš (jedině si pro to udělat vlastní rozšíření). Musíš tedy
zvolit klasický foreach.
- Elijen
- Člen | 171
Pak jsem asi nepochopil otázku … každopádně dělat z toho nějaký objekt jenom proto, že chci „updatovat nějakou maličkost“ mi nepřijde moc produktivní.
Myslel jsem, že autor chce nějak volat update query ve foreachi, proto jsem navrhl možnost updatovat všechny záznamy najednou pomocí hromadného update.
- Hafran
- Člen | 121
Díky oboum. ;)
Ptal jsem se hlavně proto že NDB umí spoustu věcí, ale je, alespoň pro
mě, velmi neprůhledný v tom, co vlastně umí a jak se to dělá a občas
umí zázraky. Proto jsem čekal že bude umět něco jako automatické
přetvoření return query na objekt.
Nevadí, udělal jsem to přes foreach a where in. A funguje to
stejně. :)
- Ot@s
- Backer | 476
Hafran napsal(a):
… alespoň pro mě, velmi neprůhledný v tom, co vlastně umí a jak se to dělá a občas umí zázraky
Navenek asi jo. Osobně mi pomohlo klikání do API jednotlivých objektů (nejen) Nette\Database* a studování návratových hodnot/objektů metod, které mě zajímají (query, insert, table, atd…). Podle toho Ti pak docvakne, co s čím můžeš „spárovat“ (= použít). Je třeba si uvědomit, že jakákoli databázová abstrakce nad samotnou DB neumí (a nebudet umět) zázraky (do určité úrovně ano, pak ne).
- mkoubik
- Člen | 728
Hafran napsal(a):
Proto jsem čekal že bude umět něco jako automatické přetvoření return query na objekt.
On je problém v tom, že u obecného query nemáš (nemusíš mít)
žádnou návaznost na tabulky, proto z toho nejde jednoduše udělat update a
musí se to dělat ručně.
Co by měl například dělat následující hypotetický kód?
$result = $db->query('SELECT NOW() as current_time');
$result['current_time'] = 'foo';
$result->save();