CTimeStampBehaviour для установки create_time и update_time сброса create_time с помощью afterFind()
Я использую CTimeStampBehaviour для установки create_time и update_time для сброса create_time с afterFind() в модели, в основном я устанавливаю формат даты, который будет отображаться на внешнем интерфейсе. Но это не работает, так как create_time отправлено 0000-00-00 00:00:00 с использованием модели afterFind(). Это прекрасно работает, когда я комментирую afterFind() в модели.
Я использовал эту функцию в моей модели:
public function behaviors(){
return array(
'CTimestampBehavior' => array(
'class' => 'zii.behaviors.CTimestampBehavior',
'createAttribute' => 'create_time',
'updateAttribute' => 'update_time',
'setUpdateOnCreate'=> true,
)
);
}
Я видел документацию по классу CTimeStampBehavior на сайте yii, в нем есть ссылка на наследование afterFind(), но не предлагается, как его использовать. Я использую afterFind() в модели, как это:
protected function afterFind() {
parent::afterFind();
$this->create_time = Yii::app()->dateFormatter->formatDateTime(
CDateTimeParser::parse(
$this->create_time, 'yyyy-MM-dd hh:mm:ss'
), 'short', 'short'
);
return true;
}
Кто-нибудь может подсказать, почему create_time заполняется нулями при использовании afterFind()?
1 ответ
create_time
будет заполнен нулями, когда вы сохраните модель после загрузки и afterFind() изменил значение create_time
на форматированную дату. Это потому, что когда вы сохраняете свою модель, вы пытаетесь отправить отформатированное значение в базу данных, которая не понимает формат, и установите значение в 0000-00-00 00:00:00
,
Когда вы реализуете afterFind()
метод для изменения формата значения, вы должны реализовать beforeSave()
метод для возврата значения в формат, понятный базе данных.
Обычно плохая идея форматировать значения непосредственно в модели. Когда вы выполняете строгий MVC, задачей View является правильное форматирование вашей даты.