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