Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 07-12-2007 16:35:13

2mx
Membre
Lieu: Grenoble
Date d'inscription: 06-08-2007
Messages: 125

Requête spécifique dans un Zend_Db_Table

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 :

Code:

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 :

Code:

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 :

Code:

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. smile

Hors ligne

 

#2 07-12-2007 20:59:38

sekaijin
Membre
Date d'inscription: 17-08-2007
Messages: 1137

Re: Requête spécifique dans un Zend_Db_Table

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

 

#3 07-12-2007 21:36:25

2mx
Membre
Lieu: Grenoble
Date d'inscription: 06-08-2007
Messages: 125

Re: Requête spécifique dans un Zend_Db_Table

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

 

#4 08-12-2007 09:40:54

sekaijin
Membre
Date d'inscription: 17-08-2007
Messages: 1137

Re: Requête spécifique dans un Zend_Db_Table

'lognum'  => new Zend_Db_Expr($this->getAdapter()->quoteInto('lognum + ?', 1)),

Hors ligne

 

#5 10-12-2007 12:06:28

2mx
Membre
Lieu: Grenoble
Date d'inscription: 06-08-2007
Messages: 125

Re: Requête spécifique dans un Zend_Db_Table

Bon le vendredi soir c'est pas très bon pour faire des testes smile

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

 

Pied de page des forums

Propulsé par PunBB
© Copyright 2002–2005 Rickard Andersson
Traduction par punbb.fr

Graphisme réalisé par l'agence Rodolphe Eveilleau
Développement par Kitpages