nette/db: update s dekrementaci

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

Zdravim,
provadim nasledujici update pomoci Nette\DB:

$this->model->getCategories()->where('order > ?', $order)
     ->update(Array('order' => 'order - 1'));

od ktereho samozrejme ocekavam, ze u vsech ovlivnenych radku snizi hodnotu ‚order‘ o 1. Update mi ale ‚order‘ vynuluje, protoze namisto pozadovaneho

UPDATE `categories`
SET `order`=`order` - 1
WHERE `order` > 2

provede

UPDATE `categories`
SET `order`='order - 1'
WHERE `order` > 2

Da se Nette nejak podhodit, co od ni v updatu pozaduju? Chci se vyhnout necistemu reseni (cyklu na dekrementaci).

llook
Člen | 407
+
0
-

Selection se to podhodit nedá. V takovýchto situacích nezbývá, než použít přímo Connection:

$categories->getConnection->exec('UPDATE `categories` SET `order` = `order` - 1 WHERE `order` > 2');
petr.pavel
Člen | 535
+
0
-

Použij SqlLiteral. Příklad

elden46
Člen | 37
+
0
-

Diky obema za pomoc, vyreseno!