Yii2如何将旧信息保存到历史表中?

时间:2017-09-04 09:53:45

标签: yii2 yii2-advanced-app yii2-basic-app yii2-model yii2-validation

感谢所有stackoverflow成员,我从这里学到了很多东西。

我有一个关于" beforeSave"的问题,我想将旧数据保存到数据库中的历史表中,例如,如果用户更改了我想要的任何内容,请保存历史表中的旧信息。

任何人都可以告诉我最好的""方案来实现这个目标?

谢谢大家,欢迎所有建议。

2 个答案:

答案 0 :(得分:1)

您必须在模型中添加beforSave()函数 检查param $ insert是否为false,这意味着你正在更新记录      在这种情况下,您可以创建一个新的HistoryModel,polutate并保存

  public function beforeSave($insert)
  {
      if(parent::beforeSave($insert))
      {
          if(! $insert)
          {
              $historyModel = new History();
              $historyModel->att1 = $this->att1;
              $historyModel->att2 = $this->att2;
              ......
              $historyModel->attN = $this->attN;
              $historyModel->save();
              return true;
          }

      }

http://www.yiiframework.com/doc-2.0/yii-db-baseactiverecord.html#beforeSave%28%29-detail

答案 1 :(得分:0)

对于所有其他想要仅保存对数据库的更改的人,这里是代码:

  public function afterSave($insert, $changedAttributes) {
    parent::afterSave($insert, $changedAttributes);
    if(!$insert) {
        $historyModel = new History();
        if(isset($changedAttributes['attr1']  )){
            $historyModel->attr1 = $changedAttributes['attr1'];
        }
        ...
        $historyModel->save(false);
    }
}

现在,您只能保存对数据库的更改,而不是每次都保存所有记录...