jak updateovat výsledek přes PDO query?

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

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. :/

Elijen
Člen | 171
+
0
-

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"));

Editoval Elijen (30. 8. 2012 0:15)

Ot@s
Backer | 476
+
0
-

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
+
0
-

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
+
0
-

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
+
0
-

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
+
0
-

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();