Khi dùng CakePHP2.x trước khi muốn thêm (insert) một record mới vào database mình hay gọi method `Model::create()`. Ví dụ: ~~~php $row = array('name' => 'Tom', 'age' => 10); $User->create(); $User->save($row); ~~~ Method `Model::create()` sẽ reset toàn bộ dữ liệu đã được set vào Model trước đó (nếu có), nhằm tránh việc thêm những dữ liệu không mong muốn còn đọng lại từ những xử lý trước đó. Tuy nhiên khi muốn sửa (update) một record thì **không được** gọi `Model::create()`. Lý do là `Model::create()` ngoài việc reset lại dữ liệu hiện có trong Model, nó còn làm thêm một động tác nữa là set sẵn giá trị cho những column được set thuộc tính default trong database (giá trị được set là giá trị default của column đó được quy định trong database). Link tài liệu. Vấn đề ở đây là khi sửa một record nào đó, thông thường mình chỉ sửa một số column nhất định. Khi đó nếu trong số những column muốn sửa không có column default mà lại gọi `Model::create()`, những column có thuộc tính default của record đó sẽ bị reset về giá trị default. Ví dụ có một bảng `users` trong database được định nghĩa như sau: ~~~SQL CREATE TABLE `users` ( `id` tinyint(4) PRIMARY KEY AUTO_INCREMENT NOT NULL , `name` varchar(32) NOT NULL, `age` int(11), `role` varchar(11) NOT NULL DEFAULT '1' ); ~~~ Column `role` ở đây có thể nhận 1 trong 2 giá trị `1` là user thường, `2` là admin. Giá trị default được set là 1. Giả sử ở đây mình chỉ muốn sửa tuổi của 1 user admin (`role = 2`) nhưng lại viết code như sau thì user admin đó sẽ bị chuyển thành user thường. ~~~php $row = array('age' => 30); $User->create(); // <- 'role' = 1 sẽ được tự động thêm vào data $User->save($row); ~~~ Code đúng phải là: ~~~php $row = array('age' => 30); $User->clear(); $User->save($row); ~~~