Если в Yii нужно в таблице создать поля для хранения даты/времени последней модификации и дату/время создания записи, удобно автоматизировать заполнение этих полей. В модель которая будет работать с данной таблицей, просто добавим фильтр перед записью в БД:
public function beforeSave() {
if ($this->isNewRecord)
$this->created = new CDbExpression('NOW()');
$this->modified = new CDbExpression('NOW()');
return parent::beforeSave();
}
Есть один неприятный момент такого решения.
ОтветитьУдалитьЕсли создать модель, у которой прописано такое поведение, то после сохранения в поле $obModel->created будет NOW(), а не ваша дата.
Т.е.
name = 'somename';
$obModel->save();
echo $obModel->created; //NOW()
поле created и предназначено для сохранения таймстампа создания записи, поле modified - время модификации соответственно. Немного не понял суть негативного момента..
ОтветитьУдалитьname = 'somename'; - к чему относится эта переменная?
echo $obModel->created; - а что тут должно быть?
возможно у вас просто неправильно указан тип поля в БД. Проверте вашу миграцию на создание таблицы, должно быть так:
ОтветитьУдалитьpublic function up(){
$this->createTable('table', array(
'id' => 'pk',
...
'created' => 'timestamp without time zone',
'updated' => 'timestamp without time zone',
));
}
* - тип поля указан для Postgres
ОтветитьУдалитьДругой способ - использование behaviors (вставляем данный метод в модельку):
ОтветитьУдалитьpublic function behaviors()
{
return array(
'CTimestampBehavior' => array(
'class' => 'zii.behaviors.CTimestampBehavior',
'createAttribute' => 'created',
'updateAttribute' => 'modified',
'setUpdateOnCreate' => true,
'timestampExpression' => new CDbExpression('NOW()'),
),
);
}
можно ли поведение прикрепить к контроллеру? т.е. параметры в поведения модели чтобы передавались в зависимости от контроллера
ОтветитьУдалить