1

モデルのafterFind()でcreate_timeとupdate_timeをリセットしてcreate_timeを設定するためにCTimeStampBehaviourを使用しています。基本的に、フロントエンドに表示される日付の形式を設定しています。ただし、モデルのafterFind()を使用するとcreate_timeが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 に答える