2012-07-29 11 views
5

idを渡すと$this->Model->save()を使用して特定のレコードを更新できますが、その行の1つのフィールドを更新するにはどうすればよいですか?CakePHPの更新クエリ

balanceフィールドのusersテーブルがあります。私はすでにそこにあるものに基づいてbalanceフィールドを更新したいと思います。

たとえば、ユーザーは残高フィールドに$ 20を持っています。私は21ドルにするために1ドルを追加したい。私はこれを行う方法を知っている唯一の方法は、使用することです

$balance = $this->Model->find('first', array(
    'conditions' => array('User.id' => $userId), 
    'fields' => array('User.balance') 
)); 

$this->Model->save(array(
    'User' => array('id' => $userId, 'balance' => $balance['User']['balance'] + $credit) 
)); 

どのように私はそのすべてに1つのsaveコールを得ることができますか?

答えて

1

はこれを試してください: -

public function edit($id = null) { 
     $this->layout = 'admin_layout'; 
     $this->Model->id = $id; 
     if (!$this->Model->exists()) { 
      throw new NotFoundException(__('Invalid model')); 
     } 
     if ($this->request->is('post') || $this->request->is('put')) { 
      if ($this->Model->save($this->request->data)) { 
       $this->Session->setFlash(__('The model has been saved')); 
       $this->redirect(array('action' => 'index')); 
      } else { 
       $this->Session->setFlash(__('The model could not be saved. Please, try again.')); 
      } 
     } else { 
      $this->request->data = $this->Model->read(null, $id); 
     } 
     $datd = $this->Model->find('list'); 
     $this->set('data', $datd); 
    } 
3
$this->Model->saveField('balance','balance+1'); 

このトリックを行う必要があります!

+0

は私ビート:)ここではAPIのリンクですhttp://api.cakephp.org/class/model#method-ModelsaveField – tigrang

+0

私はCakePHPの人ではなく(もっとCodeIgniterの人)、私はそれを理解しました!ごめんなさい! – David

+4

ちょっとした注意:コールの前に '$ this-> Model-> id'がセットされていることを確認してください。 – tigrang

8

これが何をすべき:

$this->User->updateAll(array('User.balance' =>'User.balance + 1'), array('User.id' => $id));