Отправка текущей метки времени в CakePHP


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

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

4 ответа:

В 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

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

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

timestampfield TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP

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

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

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

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