2010-09-29 1 views
15

Каков метод отправки текущей временной метки непосредственно на INSERT или UPDATE? Если бы я работал с обычным SQL, я бы использовал функцию NOW() для конкретного поля SQL при отправке. Как мне сделать это с помощью CakePHP?Отправка текущей метки времени в CakePHP

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

ответ

21

В CakePHP, вы можете включить функцию NOW() Unescaped с помощью DboSource::expression

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

Это предпочтительный способ включения функций MySQL в ваши сбережения.

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

+0

поэтому мне пришлось бы манипулировать опубликованными данными, прежде чем сохранять их. – macha

+1

Да. Но это просто добавление еще одного элемента в массив. Кроме того, если у вас есть поля в вашей таблице с именем 'created' и' updated', cakephp автоматически обновит их на операторах INSERT и UPDATE соответственно. Однако я предпочитаю добавлять элемент вручную. – webbiedave

+0

Упс, создайте 'created' и' modified' – webbiedave

0

Вы можете установить временную метку поля для автоматической инициализации и автоматического обновления

timestampfield TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP 

http://dev.mysql.com/doc/refman/5.0/en/timestamp.html

7

если вы добавляете созданные и измененные столбцы в таблице вами они будут автоматически с текущей отметкой времени. Если случай отличается - т. Е. Вы хотите заполнить поле, которое позже вы хотите изменить, возможно, лучше использовать решение edorian.

+0

Это торт и должен быть предпочтительным ответом +1. Если ОП запрашивает модифицируемое поле, она должна быть более конкретной. – benjamin

0

Это может показаться тривиальным и для опытных пользователей, но и для полных новичков это может быть полезно также указать код использования:

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

, который должен быть добавлен к голове Источника (лучше бы в качестве комментария, но не могу комментировать, но :))