UPDATE query with CakePHP
16,403
Solution 1
try this:-
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);
}
Solution 2
This should do:
$this->User->updateAll(array('User.balance' =>'User.balance + 1'), array('User.id' => $id));
Solution 3
$this->Model->saveField('balance','balance+1');
Should do the trick!
Author by
James Dawson
Updated on June 11, 2022Comments
-
James Dawson almost 2 years
I know I can use
$this->Model->save()
to update a particular record if I pass the id in, but how can I update a single field on that row?I have a
users
table with abalance
field. I want to update thebalance
field based on what's already there.For example, a user has $20 in the balance field. I want to add $1 to make it $21. The only way I know how to do this is to use
$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) ));
How can I get that all into one
save
call?