2013-05-11 5 views
1

Je suis en train de faire une updateAll comme suit:Comment updateALL en utilisant CakePHP

// initialize the array 
$array = array(
    "Land Rover" => array("LAND ROVER") 
); 

// loop both arrays 
foreach($array as $new => $aOld) { 
    foreach($aOld as $old) { 
     $this->updateAll(array('make = $new'), array('make = $old')); 
    } 
} 

mais je reçois l'erreur:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'Rover WHERE `make` = 'LAND ROVER'' at line 1 

ce que je suis AFTER est:

UPDATE items SET make = 'Land Rover' WHERE make = 'LAND ROVER'; 

Veuillez ne pas me donner de réponses sur la conversion de cas car j'ai d'autres éléments de tableau qui sont plus que cela.

Comment éviter l'erreur? En fait, comment puis-je vider le SQL complet? Je cours ce code dans le Console.

Merci beaucoup.

EDIT: Je viens de recevoir un débogage pour le SQL:

UPDATE `items` AS `Item` SET `Item`.`id` = make = "Land Rover" WHERE `make` = '\"LAND ROVER\"' 

Un problème évident, mais comment at-il y arriver?

+0

Référer ce serait un air de défi vous aider à http://book.cakephp.org/2.0/en/models/saving-your-data.html – liyakat

+0

@liyakat je l'ai déjà. J'ai l'erreur en adaptant l'exemple montré. – khany

Répondre

2

Les valeurs et les conditions doivent être transmises en tant associative tableau;

$this->updateAll(
    array(
     'Item.make' => Sanitize::escape($new) 
    ), 
    array(
     'Item.make' => $old 
    ) 
); 

Note; Je ne suis pas derrière mon ordinateur et je ne sais pas si Sanitize::escape() déjà cite la valeur, sinon;

array(
    'Item.make' => "'" . Sanitize::escape($new) . "'" 
), 
0

Vous devez citer les valeurs $fields vous param comme le API dit:

$this->updateAll(array("make = \"$new\""), array('make = $old')); 

Une version plus lisible serait:

$this->updateAll(array('make' => "\"$new\""), array('make' => $old)); 
+0

le premier n'a produit aucune erreur mais n'a fait rien. Le second met '$ new' dans le champ make. – khany

+0

Vérifiez les instructions mises à jour. – ADmad

0
$this->modelname->updateAll(array('make'=>"'$new'"), array('modelname.make'=>$old)) 

i hope its working