簡體   English   中英

cakePHP更新表字段

[英]cakePHP update table fields

我有一個CakePHP問題-我想進行這樣的更新查詢

UPDATE table SET field = field + some_var

而且我不知道該怎么做...

誰能幫我?

唯一的“正確”方法是使用Cake的“原子查詢”包裝方法。 在您的情況下,將為“ updateAll”。 這個問題是一打其他問題的完全重復-例如,將Cakephp數據庫字段增加一個值

$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

有兩種更新方法:

如果您僅更新一個字段,則可以執行以下操作:

$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回調方法來實現所需的功能。

回調方法:BeforeSave

public function beforeSave($options = array()) {
    if (!empty($this->data['table']['field'])){
         $this->data['table']['field'] += $this->data['table']['some_var'];
    }
    return true;
}

我認為最好的方法是使用Model::updateAll(array $fields, array $conditions)

當您嘗試使用相同的主鍵更新時Model::saveField(string $fieldName, string $fieldValue, $validate = false)此方法顯示cannot replace duplicate key error 想一想,當更新時,他們必須使用主鍵作為匹配值來更新值。

采用

$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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM