12 июля 2008 г.

Значения полей created/updated по-умолчанию в CakePHP

Не секрет, что некоторые поля в моделях Cake умеет заполнять самостоятельно, основываясь на названии поля. Например в поля created и updated (или modified), если у них тип DATETIME, будут подставляться даты создания и изменения. При создании таблицы надо выбрать значение по умолчанию для этих полей. В документации на Cake 1.2 недавно появилось предупреждение на эту тему, но ктож все время будет документацию перечитывать? :-)

У created и updated значение по-умолчанию должно быть NULL. В общем-то все будет прекрасно работать и со значением “0000-00-00 00:00:00”, которое phpMyAdmin пытается установить самостоятельно, но ровно до того момента, когда появится необходимость добавить несколько записей и, в соответствии с рекомендациями ВЦСПС разработчиков, перед каждым вызовом $Model::save(…) вызывать $Model::create(…).

$Model->create() заполняет $Model::data значениями по-умолчанию для всех полей, а $Model::save() изменяет значения created/updated только если они не определены или равны null.

Бонус

О малоизвестных методах модели в блоге Cakebaker. Для настоящих эстетов есть метод Model::hasAny(), определяющий есть-ли хоть одна запись, удовлетворяющая заданным условиям. На самом деле это просто обертка к Model::findCount(), но смотрится нагляднее.