CTimeStampBehaviour用于设置create_time和update_time使用afterFind()重置create_time

时间:2012-11-16 12:49:07

标签: php datetime yii yii-behaviour

我正在使用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被填零?

1 个答案:

答案 0 :(得分:0)

在加载模型后保存模型并且afterFind()将create_time的值更改为格式化日期时,

create_time将填零。 这是因为当您保存模型时,您正在尝试将格式化的值发送到不理解格式的数据库,并将值设置为0000-00-00 00:00:00

当您实现afterFind()方法来更改值格式时,您必须实现beforeSave()方法将值设置回数据库可以理解的格式。

直接在模型上格式化值通常是个坏主意。当您进行严格的MVC时,View的工作就是正确格式化您的日期。