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!

Share:
16,403
James Dawson
Author by

James Dawson

Updated on June 11, 2022

Comments

  • James Dawson
    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 a balance field. I want to update the balance 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?