CakePHP:使用save()加/减?

时间:2012-08-09 12:28:39

标签: database cakephp php

我试图通过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);

3 个答案:

答案 0 :(得分:3)

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

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

阿伦的回答不正确;你必须在引号内加上-1才能让Cake知道它是查询的一部分。否则,它将尝试将所有User.value设置为-1。 注意您必须在第二个条件中放置要更新的列的信息(标识符)。

答案 1 :(得分: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

答案 2 :(得分:-1)

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

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

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