Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Pages: 1
Bonjour,
Je rencontre un problème d'update et ne sais pas vraiment comment y remédier...
Je cherche à reproduire l'équivalent de cette simple requête qui fonctionne parfaitement en ligne de commande dans ma base Mysql :
UPDATE `services` SET `left_side`=`left_side`+2 WHERE `left_side` >= '5';
... de sorte à ajouter 2 aux valeurs de cette fichue colonne...
J'ai étendu Zend_Db_Table_Abstract
J'ai testé tout un tas de possibilités comme celle qui me semblait la plus logique, c'est à dire :
$Data = (array('left_side' => 'left_side' + 2)); $whereClause = $this->getAdapter()->quoteInto('left_side >= ?', 5); $this->update($Data, $whereClause);
... mais $Data n'est pas correct...
L'un d'entre-vous a t'il une idée ?
Dernière modification par Rolf (21-09-2012 15:14:46)
Hors ligne
Pourquoi Data porte une majuscule ? (enfin bon c'est pas le sujet, mais c'est un array donc une variable, pas un objet...).
Sinon, pourquoi pas plutôt :
$Data = (array('left_side' => '`left_side` + 2'));
Le second membre est donc ainsi une expression, les `permettent de définir qu'il s'agit d'une colonne...
Je n'ai pas testé par contre... Il faut peut être ajouter un Zend_Db_Expr() autour de la valeur dans ton array.
Hors ligne
Merci Théocrite !
$Data s'appelait auparavant $aData ... oublié de corriger
J'ai testé avec les backticks comme tu proposes, puis entouré de guillemets simples, les valeurs de la colonne sont changées en zéro.
J'ai testé également Zend_Db_Expr() comme ceci si j'ai bien compris :
$aData = (array('left_side' => new Zend_Db_Expr(`left_side` + 2))); $whereClause = $this->getAdapter()->quoteInto('left_side >= ?', 5); $this->update($aData, $whereClause);
... seule la valeur 2 est prise en compte. Du coup les valeurs de la colonne sont changées en 2.
Il doit bien y avoir une solution ? Je ne pensais pas galérer autant pour une requête aussi simple
Dernière modification par Rolf (21-09-2012 14:52:24)
Hors ligne
Il manque des guillemets dans ton expression :
$aData = (array('left_side' => new Zend_Db_Expr('`right_side` + 2')));
Hors ligne
bonjour,
voilà comme s'y prendre avec Zend_Db_Expr()
[lang=php] $Data =array( 'left_side'=>new Zend_Db_Expr('left_side+10') );
Dernière modification par amiss (21-09-2012 15:07:27)
Hors ligne
Yeah ! Cela fonctionne !
THEOCRITE, MERCI !!! T'es un chef !
Dernière modification par Rolf (21-09-2012 15:08:04)
Hors ligne
amiss a écrit:
bonjour,
voilà comme s'y prendre avec Zend_Db_Expr()Code:
[lang=php] $Data =array( 'left_side'=>new Zend_Db_Expr('left_side+10') );
Bonjour amiss, malheureusement left_side n'est pas reconnu comme nom de colonne si tu ne l'entoures pas de backticks...
[lang=php] $Data =array( 'left_side'=>new Zend_Db_Expr('`left_side`+10') );
... est la solution.
Hors ligne
Rolf, c'est bizarre ça toujours marché sur mon serveur(linux) sans backticks. J'étais un peu naïf de croire que Zend_Db_Expr ajoutait des backticks comme le fait souvent Zend_Db sur les requêtes.En tout cas merci pour l'info.
Hors ligne
amiss a écrit:
Rolf, c'est bizarre ça toujours marché sur mon serveur(linux) sans backticks. J'étais un peu naïf de croire que Zend_Db_Expr ajoutait des backticks comme le fait souvent Zend_Db sur les requêtes.En tout cas merci pour l'info.
... oui, c'est curieux, il y a forcément une raison, mais laquelle ??? En tout ca il n'y a que de cette façon que cela fonctionne pour moi (MAMP).
(Suis originaire de Châteaubourg )
Hors ligne
nous sommes alors voisins
Hors ligne
Pages: 1