我有一個CakePHP的問題 - 我想打一個更新查詢這樣CakePHP的更新表中的字段
UPDATE table SET field = field + some_var
,我不知道該怎麼辦呢?
任何人都可以幫我?
我有一個CakePHP的問題 - 我想打一個更新查詢這樣CakePHP的更新表中的字段
UPDATE table SET field = field + some_var
,我不知道該怎麼辦呢?
任何人都可以幫我?
你可以使用beforeSave的回調方法來實現你所需要的。
public function beforeSave($options = array()) {
if (!empty($this->data['table']['field'])){
$this->data['table']['field'] += $this->data['table']['some_var'];
}
return true;
}
有兩種方法做一個更新:
如果只更新一個字段,你可以這樣做:
$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等上的工作方式相同)
只有「正確」的方式將使用蛋糕的「原子查詢」包裝方法。在你的情況下,這將是「updateAll」。 的問題是十幾個問題的完整副本 - 就像Incrementing Cakephp database field by a value
$var = 1;
$this->Article->updateAll(
array('Article.viewed' => 'Article.viewed + ' . $var),
array('Article.id' => $id)
);
我認爲最好的方法是使用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
這是不正確。雖然這具有將兩個值相加在一起的效果,但它沒有考慮到可能存在兩個重疊動作的事實。例如,如果您幾乎同時進行兩筆存款,一筆10美元,另一筆100美元,則只有最後一筆存款才能申請。原始查詢將捕獲兩者,因爲它不依賴模型中的數據來計算答案。 – tadman
是的,你是對的。使用$ this-> query(「UPDATE table SET field = field + some_var」)更好。 – leungpeng
沒有它沒有。使用查詢總是應該是最後一個選項。 – mark