2015-05-13 14 views
8

Trong một số phần của ứng dụng của tôi, tôi chỉ cần cập nhật trường is_active của một số table với nhiều trường. Cách tiếp cận tốt nhất để cập nhật chỉ trường này là gì và tránh các xác thực và yêu cầu của tất cả các trường khác?Chỉ cập nhật một trường trên Cakephp 3

+0

Là một SQL liên quan câu hỏi hoặc PHP mã (CakePHP) câu hỏi? –

+0

Tôi đang nói về cakephp 3 –

+0

@YasenZhelev câu hỏi này là từ năm 2010. có lẽ cakephp 2 hoặc thậm chí 1 –

Trả lời

10

Và nếu bạn muốn cập nhật hàng cụ thể, hãy sử dụng này:

$users= TableRegistry::get('Users'); 
$user = $users->get($id); // Return article with id = $id (primary_key of row which need to get updated) 
$user->is_active = true; 
// $user->email= [email protected]; // other fields if necessary 
if($users->save($user)){ 
    // saved 
} else { 
    // something went wrong 
} 

Xem ở đây (Updating data in CakePHP3).

+0

'if ($ user-> save ($ user))' dòng này sẽ thay thế bằng 'if ($ users-> save ($ user)) ' – Poonam

+0

Ồ tôi hiểu rồi. Bạn đúng rồi. –

+0

Bánh 3 có tính năng bẩn. Vì vậy, trừ khi bạn sửa đổi các trường khác, chúng sẽ không được cập nhật hoặc gửi trong truy vấn. Vì vậy, điều này giúp bạn không ghi đè các cột mật khẩu một cách tình cờ. Tuy nhiên, mật khẩu và các trường tương tự sẽ có thể truy cập được đặt thành false anyway. – styks

0

Sử dụng ví dụ tại đây: http://book.cakephp.org/3.0/en/orm/database-basics.html#running-update-statements. Chạy mã bên dưới để cập nhật tất cả các bản ghi trong bảng table_name_here với một giá trị mới cho cột is_active.

use Cake\Datasource\ConnectionManager; 
$connection = ConnectionManager::get('default'); 
$connection->update('table_name_here', ['is_active' => 'new_value_here']); 
7

này sẽ làm việc:

$users = TableRegistry::get('Users'); 
$query = $users->query(); 
$query->update() 
    ->set(['is_active' => true]) 
    ->where(['id' => $id]) 
    ->execute(); 

http://book.cakephp.org/3.0/en/orm/query-builder.html#updating-data

+3

Với phương pháp này, làm thế nào để bạn xác nhận nó đã được cập nhật và chuyển hướng đến các địa điểm cần thiết? – artSir

+1

gọi lại không được kích hoạt trong quá trình này, vì vậy nếu bạn cần chúng, điều này sẽ không hoạt động – dav

-4

Những câu trả lời khác không sử dụng quốc tế và các mô hình khác đạo cụ, callbacks vv Tôi nghĩ rằng điều này là do các nhà xây dựng truy vấn , nó không sử dụng các mô hình và do đó hành vi của chúng, do đó bạn nên sử dụng:

$this->loadModel('Inputs'); 
$input = $this->Inputs->find()->where(['`key`' => $this->request->data['id']])->first(); 
$this->Inputs->patchEntity($input, ['prop' => $this->request->data['prop']]); 

if ($this->Inputs->save($input)) { 
    die(json_encode(true)); 
} else { 
    die(json_encode(false)); 
} 
0

Khi bạn không muốn callbacks được kích hoạt, chỉ cần sử dụng updateAll()

$table->updateAll(['field' => $newValue], ['id' => $entityId]); 
Các vấn đề liên quan