Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
J’aimerai savoir se que vous considéré comme "Best Practice" lorsque vous avez des requêtes spécifiques à faire dans un Zend_Db_Table
Je vois 3 solutions :
SQL brute de décoffrage :
public function updateLogStat($username) { $db = $this->getAdapter(); $sql = $db->quoteInto("UPDATE `user` SET `lognum` = `lognum` + 1, `logdate` = NOW() WHERE username = ?", $username); $db->getConnection()->exec($sql); }
Simple, efficace, rapide, c’est plutôt ce que j’aurais tendance a privilégier.
Zend_Db_Table :
public function updateLogStat($username) { $where = $this->getAdapter()->quoteInto('username = ?', $username); $data = array( 'lognum' => new Zend_Db_Expr('lognum' + 1), 'logdate' => new Zend_Db_Expr('NOW()') ); $this->update($data, $where); }
En l’occurrence ici ça ne marche pas avec new Zend_Db_Expr('lognum' + 1)
OO avec Zend_Db_Row :
public function updateLogStat($username) { $user = $this->fetchRow($where); $user->lognum++; $user->logdate = new Zend_Db_Expr('NOW()'); $user->save();} }
OO, pas de SQL, très lisible mais 2 requêtes.
Voilà, si vous avez un avis sur la question ou si vous voyez d’autre techniques, ça m’intéresse.
Hors ligne
la deuxième méthode sur la table
il suffit d'ajuster l'expression. genre
'lognum' => new Zend_Db_Expr($this->getAdapter()->quoteInto('lognum= ?', 1)),
A+JYT
Hors ligne
sekaijin a écrit:
'lognum' => new Zend_Db_Expr($this->getAdapter()->quoteInto('lognum= ?', 1)),
En fait je cherche a incrémenter lognum de +1, là ça me donne lognum = 1...
new Zend_Db_Expr('lognum = lognum +1') ne marche pas non plus.
Hors ligne
'lognum' => new Zend_Db_Expr($this->getAdapter()->quoteInto('lognum + ?', 1)),
Hors ligne
Bon le vendredi soir c'est pas très bon pour faire des testes
Les trois solutions suivante fonctionnent
// ici on peut se passer de quoteInto() car rien n'est envoyé par l'utilisateur
'lognum' => new Zend_Db_Expr($this->getAdapter()->quoteInto('lognum + ?', 1))
'lognum' => new Zend_Db_Expr('lognum + 1')
// Par contre on peut encadrer le nom de colonne avec quoteIdentifier() se qui donne `lognum` pour mysql
'lognum' => new Zend_Db_Expr($this->getAdapter()->quoteIdentifier('lognum', true).' + 1')
Hors ligne