2012-07-29 13 views
5

So che posso usare $this->Model->save() per aggiornare un particolare record se passo l'id in, ma come posso aggiornare un singolo campo su quella riga?query UPDATE con CakePHP

Ho una tabella users con un campo balance. Voglio aggiornare il campo balance in base a ciò che è già presente.

Ad esempio, un utente ha $ 20 nel campo del saldo. Voglio aggiungere $ 1 per renderlo $ 21. L'unico modo che conosco come fare questo è quello di utilizzare

$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) 
)); 

Come posso ottenere che tutto in una save chiamata?

risposta

1

provare questo: -

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'); 

Dovrebbe fare il trucco!

+0

mi ha battuto :) Ecco collegamento API http://api.cakephp.org/class/model#method-ModelsaveField – tigrang

+0

Non sono nemmeno un ragazzo di CakePHP (più di un ragazzo CodeIgniter) e l'ho capito! Scusate! – David

+4

Solo una nota in più: assicurati che '$ this-> Model-> id' sia impostato prima della chiamata – tigrang

8

Questo dovrebbe fare:

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