2012-07-29 35 views
5

Tôi biết tôi có thể sử dụng $this->Model->save() để cập nhật một bản ghi cụ thể nếu tôi chuyển id vào, nhưng làm cách nào để cập nhật một trường trên hàng đó?Truy vấn UPDATE với CakePHP

Tôi có một bảng users với trường balance. Tôi muốn cập nhật trường balance dựa trên những gì đã có sẵn.

Ví dụ: người dùng có $ 20 trong trường số dư. Tôi muốn thêm $ 1 để kiếm được $ 21. Cách duy nhất tôi biết cách thực hiện việc này là sử dụng

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

Làm cách nào để nhận được tất cả trong một cuộc gọi save?

Trả lời

1

thử điều này: -

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

Nên thực hiện thủ thuật!

+0

đánh bại tôi :) Dưới đây là link API http://api.cakephp.org/class/model#method-ModelsaveField – tigrang

+0

Tôi thậm chí không phải là một anh chàng CakePHP (thêm một anh chàng CodeIgniter) và tôi đã tìm ra nó! Lấy làm tiếc! – David

+4

Chỉ cần lưu ý thêm: đảm bảo '$ this-> Model-> id' được đặt trước cuộc gọi – tigrang

8

này nên làm:

$this->User->updateAll(array('User.balance' =>'User.balance + 1'), array('User.id' => $id)); 
Các vấn đề liên quan