4

我试图通过 Cake 的 save() 函数简单地执行以下操作。

UPDATE user SET value = value-1

但是,它似乎只能设置。它不会理解我传递给它的任何东西来增加或减少,而且互联网上似乎没有人遇到这个问题。:P 即使浏览了基于 CakePHP 2.0 构建的完整软件,我发现 $this->query() 用于增量更新!如果我还没有要设置的值,这真的是我要更新的方式吗?

(代码如下所示)

 $data = array('id' => uid, 'value' => "Users.value = Users.value - 1");
 $this->User->save($data);
4

3 回答 3

3

CakePHP 数据库中产生增量或减量的代码如下:

$this->User->updateAll(array('value' => 'value - 1'), array('id' => uid));

Arun 的回答不正确;您必须将 - 1 放在引号内以使 Cake 识别它是查询的一部分。否则它将尝试将所有 User.value 设置为 -1。 请注意,您必须将要更新的列的信息(标识符)放在第二个条件中。

于 2012-08-10T12:40:35.807 回答
1

基本上你只需要使用 updateAll 来进行这样的原子查询

$this->User->updateAll($fields, $conditions);

http://book.cakephp.org/2.0/en/models/saving-your-data.html#model-updateall-array-fields-array-conditions

于 2012-08-09T12:46:25.460 回答
-1

您可以使用以下查询执行此操作:

$this->User->updateAll(array('User.value' => 'User.value' - 1));

//or
//$this->User->updateAll(array('User.value' => 'User.value' - 1), array('User.id' => $uid));
于 2012-08-09T12:57:46.913 回答