1

我正在使用 CTimeStampBehaviour 设置 create_time 和 update_time 在模型中使用 afterFind() 重置 create_time,基本上我正在设置要在前端显示的日期格式。但这不起作用,因为 create_time 在使用模型的 afterFind() 时发送 0000-00-00 00:00:00。当我在模型中评论 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 是零填充的吗?

4

1 回答 1

0

create_time当您在加载模型后保存模型并且 afterFind() 将值更改create_time为格式化日期时,将填充为零。这是因为当您现在保存模型时,您正试图将格式化的值发送到不理解格式的数据库并将值设置为0000-00-00 00:00:00.

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

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

于 2012-12-07T17:40:00.873 回答