我正在使用CTimeStampBehaviour设置create_time和update_time在模型中使用afterFind()重置create_time,基本上我正在设置要在前端显示的日期格式。但这不起作用,因为create_time在00:00:00发送时使用的是模型的afterFind()。当我在模型中评论afterFind()时,它工作正常。
我在我的模型中使用了这个功能:
public function behaviors(){
return array(
'CTimestampBehavior' => array(
'class' => 'zii.behaviors.CTimestampBehavior',
'createAttribute' => 'create_time',
'updateAttribute' => 'update_time',
'setUpdateOnCreate'=> true,
)
);
}
我在yii网站上看过CTimeStampBehavior类的文档,它引用了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;
}
有人建议在使用afterFind()时为什么create_time被填零?
答案 0 :(得分:0)
create_time
的值更改为格式化日期时, create_time
将填零。
这是因为当您保存模型时,您正在尝试将格式化的值发送到不理解格式的数据库,并将值设置为0000-00-00 00:00:00
。
当您实现afterFind()
方法来更改值格式时,您必须实现beforeSave()
方法将值设置回数据库可以理解的格式。
直接在模型上格式化值通常是个坏主意。当您进行严格的MVC时,View的工作就是正确格式化您的日期。