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));

アルンの答えは正しくありませんでした。Cake にクエリの一部であることを認識させるには、-1 を引用符で囲む必要があります。それ以外の場合、すべての User.value を -1 に設定しようとします。 更新する列の情報 (識別子) を 2 番目の条件に入れる必要があることに注意してください。

于 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 に答える