2010-09-29 36 views
15

Phương pháp gửi dấu thời gian hiện tại trực tiếp trên số INSERT hoặc UPDATE là gì? Nếu tôi đang chạy SQL thông thường, tôi sẽ sử dụng hàm NOW() cho trường SQL cụ thể khi gửi. Làm thế nào tôi sẽ làm điều đó với CakePHP?Gửi dấu thời gian hiện tại trong CakePHP

$this->Model->save($this->data) 

Trả lời

21

Trong CakePHP, bạn có thể bao gồm các NOW() chức năng unescaped bằng cách sử dụng DboSource::expression

$this->data['SomeModel']['your_datetime_field'] = DboSource::expression('NOW()'); 
$this->Model->save($this->data); 

Đây là ưu tiên cách bao gồm các hàm MySQL trong các lần lưu của bạn.

http://api.cakephp.org/2.3/class-DboSource.html#_expression

+0

vì vậy tôi sẽ phải thao tác dữ liệu đã đăng trước khi lưu. – macha

+1

Có. Nhưng nó chỉ thêm một phần tử nữa vào mảng. Ngoài ra, nếu bạn có các trường trong bảng có tên là 'created' và' updated', cakephp sẽ tự động cập nhật chúng trên các câu lệnh 'INSERT' và' UPDATE', tương ứng. Tuy nhiên, tôi thích thêm phần tử theo cách thủ công. – webbiedave

+0

Rất tiếc, làm cho 'đã tạo' và' được sửa đổi ' – webbiedave

7

nếu bạn thêm các cột tạo ra và sửa đổi trong bạn bảng họ sẽ được tự động điền dấu thời điểm hiện tại. Nếu trường hợp khác - nghĩa là bạn muốn điền vào một trường mà sau này bạn muốn sửa đổi, có thể sử dụng giải pháp của edorian là tốt nhất.

+0

Đây là cách bánh và nên là câu trả lời ưu tiên +1. Nếu OP yêu cầu một trường có thể sửa đổi, cô ấy phải cụ thể hơn. – benjamin

0

này có vẻ tầm thường cho người dùng có kinh nghiệm nhưng đối với tổng số người mới bắt đầu nó có thể hữu ích cũng cung cấp mã sử dụng:

App::uses('DboSource', 'Model/DataSource'); 

, mà phải được bổ sung vào đầu nguồn của (sẽ tốt hơn là một lời nhận xét, nhưng không thể nhận xét, nhưng :))

Các vấn đề liên quan