如何使用cakephp更新所有

时间:2013-05-11 10:46:47

标签: cakephp

我正在尝试执行updateAll,如下所示:

// 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'));
    }
}

但是我收到了错误:

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

我所追求的是:

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

请不要给我关于案例转换的答案,因为我有其他数组元素不止于此。

如何避免错误?实际上,我如何转储完整的SQL?我在Console

中运行此代码

非常感谢。

编辑:我刚刚接受了SQL的调试:

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

一个明显的问题,但它是如何实现的?

3 个答案:

答案 0 :(得分:2)

值和条件应作为关联数组传递;

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

请注意; 我不在我的电脑后面,不确定Sanitize::escape()是否引用值,否则;

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

答案 1 :(得分:0)

您需要自己引用$fields param中的值,就像API所说:

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

更易读的版本是:

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

答案 2 :(得分:0)

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

i hope its working