cakephp 从旧数据值 + 新值保存更新数据
Posted
技术标签:
【中文标题】cakephp 从旧数据值 + 新值保存更新数据【英文标题】:cakephp save update data from old data value + new value 【发布时间】:2014-02-18 08:36:25 【问题描述】:我不知道要搜索我的问题的关键字。如何保存已存在值的字段的更新数据,我想用附加值对其进行更新。
这是一个 cakephp 示例:
$userData = array(
'id' => $userId,
'credit' => $newCredit // This will update only new credit
);
$this->User->save($userData);
如果我使用普通查询 mysql 会是这样的:
mysql_query("UPDATE `users` SET `credit` = `credit` + '$newCredit' WHERE `id` = '$userId'");
您只能看到一次普通的 SQL Query 以使用credit
的现有数据进行更新。我知道我可以通过使用SELECT
这些数据并在php
中执行操作,然后返回UPDATE
数据,但这将是2 次(选择,然后更新)。
那么 cakephp 可以一下子搞定吗?以及如何:D?
【问题讨论】:
【参考方案1】:updateAll 可以工作
$this->User->updateAll(
array('credit' => "credit + $newCredit"),
array('id' => $userId)
);
【讨论】:
【参考方案2】:试试这个......
$user = $this->User->read(null, $primary_key_id);
$new_credit = $user['User']['credit'] + $add_new_value_of_credit;
$this->User->id = $primary_key_id;
$this->User->saveField('credit', $new_credit);
【讨论】:
我希望我在名为credit
的字段中的旧数据更新为新信用,而不用新值替换旧值。
您只需要更新相应行的“信用”列吗?
是的,但我想要更新查询但不替换我的旧数据值。例如,我有信用 = 10
,然后我还有另一个新信用 5
要更新,那么我的信用将是 15
(不是5
)。【参考方案3】:
试试这个:
$userData = array(
'id' => $userId,
'credit' => 'credit +'.$newCredit // old credit value + new credit value
);
$this->User->save($userData);
或者这个:
$newCredit = 566;
$this->User->read(null, $userId);
$this->User->set('credit',$this->User->field('credit') + $newCredit);
$this->User->save();
【讨论】:
不,它不起作用,错误出来了:SQLSTATE[HY000]: General error: 1366 Incorrect integer value: 'credit + 1' for column 'credit' at row 1
。使用此 sql 日志:UPDATE users SET credit = 'credit + 5' WHERE id = '120'
。因为'credit + '.$newCredit
将被转换为字符串
当你使用$this->User->read(null, $userId);
时,表示选择查询已经被使用,然后更新数据。所以和我上面抱怨的一样-_-
那是行不通的,如果你让它工作调用 save 它将不是一个原子操作。以上是关于cakephp 从旧数据值 + 新值保存更新数据的主要内容,如果未能解决你的问题,请参考以下文章
UITableViewCell detailTextLabel在为其分配新值时不会更新其文本
cakephp:使用保存方法,我想在数据没有变化时更新修改时间