CakePHP に問題があります - このような更新クエリを作成したい
UPDATE table SET field = field + some_var
そして、私はそれを行う方法がわかりません...
誰でも私を助けることができますか?
CakePHP に問題があります - このような更新クエリを作成したい
UPDATE table SET field = field + some_var
そして、私はそれを行う方法がわかりません...
誰でも私を助けることができますか?
唯一の「正しい」方法は、cake の「アトミック クエリ」ラッパー メソッドを使用することです。あなたの場合、それは「updateAll」になります。質問は、Cakephpデータベースフィールドを値でインクリメントするなど、他の12の質問の完全な複製です
$var = 1;
$this->Article->updateAll(
array('Article.viewed' => 'Article.viewed + ' . $var),
array('Article.id' => $id)
);
これはドキュメントにもあります: http://book.cakephp.org/2.0/en/models/ Saving-your-data.html#model-updateall-array-fields-array-conditions
更新を行うには2つの方法があります。
1つのフィールドのみを更新する場合は、次のことができます。
$this->Model->id = foo;
$this->Model->saveField('field_name', 'field_value');
または、$ this-> Model-> save()を使用して更新を行うことができます。
$data = array(
'Model'=>array(
'id'=>foo,
'field_name'=>'field_value',
'another_field_name'=>'another_field_value'
)
);
$this->Model->save($data);
$ this-> Model-> query()の使用を避け、CakePHPの組み込みメソッドを使用する必要があります。これは、組み込みメソッドがデータソースに依存しないためです(MySQL、Oracle、MSSQLなどでも同じように機能します)。
コールバック メソッド beforeSave を使用して、必要なものを実装できます。
public function beforeSave($options = array()) {
if (!empty($this->data['table']['field'])){
$this->data['table']['field'] += $this->data['table']['some_var'];
}
return true;
}
使用する
$this->Baker->updateAll(
array('Baker.approved' => 'Baker.approved + ' . $some_var),
array('Baker.id' => $someId)
);
詳細については、http: //book.cakephp.org/2.0/en/models/ Saving-your-data.htmlを参照してください。