Yii2 如何将旧信息保存到历史记录-table?
Yii2 how to save old informations to history-table?
感谢所有 Whosebug 成员,我从这里学到了很多东西。
我有一个关于 "beforeSave" 的问题,我想将旧数据保存到数据库中的 history-table,例如,如果用户更改任何内容,我想将旧信息保存在历史记录中-table.
谁能告诉我实现此目标的 "best" 方案是什么?
谢谢大家,欢迎大家提出建议。
您必须在模型中添加 beforSave() 函数。
检查参数 $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
对于所有其他只想保存对数据库的更改的人,这里是代码:
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);
}
}
现在您每次只能保存对数据库的更改,而不是所有记录...
感谢所有 Whosebug 成员,我从这里学到了很多东西。
我有一个关于 "beforeSave" 的问题,我想将旧数据保存到数据库中的 history-table,例如,如果用户更改任何内容,我想将旧信息保存在历史记录中-table.
谁能告诉我实现此目标的 "best" 方案是什么?
谢谢大家,欢迎大家提出建议。
您必须在模型中添加 beforSave() 函数。
检查参数 $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
对于所有其他只想保存对数据库的更改的人,这里是代码:
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);
}
}
现在您每次只能保存对数据库的更改,而不是所有记录...