【问题标题】:cakephp save update data from old data value + new valuecakephp 从旧数据值 + 新值保存更新数据
【发布时间】: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?

【问题讨论】:

    标签: php mysql sql cakephp


    【解决方案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 它将不是一个原子操作。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-30
      • 2012-05-23
      • 1970-01-01
      • 2013-07-03
      • 1970-01-01
      • 1970-01-01
      • 2018-04-14
      相关资源
      最近更新 更多