1

CakePHP に問題があります - このような更新クエリを作成したい

UPDATE table SET field = field + some_var

そして、私はそれを行う方法がわかりません...

誰でも私を助けることができますか?

4

5 に答える 5

7

唯一の「正しい」方法は、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

于 2013-02-07T09:48:14.007 に答える
4

更新を行うには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などでも同じように機能します)。

于 2013-02-07T09:40:45.003 に答える
0

コールバック メソッド beforeSave を使用して、必要なものを実装できます。

コールバック メソッド: BeforeSave

public function beforeSave($options = array()) {
    if (!empty($this->data['table']['field'])){
         $this->data['table']['field'] += $this->data['table']['some_var'];
    }
    return true;
}
于 2013-02-07T01:37:31.973 に答える
0

使用する

$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を参照してください。

于 2014-01-03T07:10:46.453 に答える