当编辑或更新模型属性时,我不想更新该记录。而是应创建一个新记录,并禁用旧记录。 另外我还有另一个保存旧记录的日志表。
我的代码如下
public function afterSave($insert, $changedAttributes)
{
if ($insert) {
// Да это новая запись (insert)
$model = new Test3log();
$model->desc = $this->desc ;
$model->id_old = $this->id;
$model->isdisabled=1;
$model->save();
} else {
$save = "";
foreach ($changedAttributes as $change => $val) {
if (trim($val) != trim($this->{$change})) {
$save .= $this->attributeLabels()[$change] . '[' . $val . '->' . $this->{$change} . "]\n";
}
}
$xx =$this->getoldattributes();
if ($save != "") {
// Get Old data
// Get New data
// repl new record with old id
// repl old record with new id
$modelnewline = new Test3();
$modelnewline->desc = $xx['desc'];
$modelnewline->id_old = $xx['id'];
$modelnewline->id = NULL;
$modelnewline->isdisabled = 1;
$modelnewline->save();
$newid = $modelnewline->id;
$oldid =$this->id;
$this->isdisabled=1;
$this->id = $newid;
$this->desc = $changedAttributes['desc'];
$this->save(false);
}
}
parent::afterSave($insert, $changedAttributes);
}
答案 0 :(得分:0)
您的问题太过广泛,您还没有提到您当前所面对的问题到底是什么,但是考虑到您是社区的新手,我将尝试以可以相应翻译的方式回答问题。
首先,您描述的问题需要在模型的beforeSave()
中实现,而该问题在插入或更新记录的开始即被调用,而不是afterSave()
,因为您的记录已经被更新了新的价值观,您肯定不想这么做。
根据您的要求。
当模型属性被编辑或更新时,我不希望那样 记录进行更新。相反,应创建新记录,而旧记录 记录应被禁用。另外,我还有另一个日志表 记录已保存。
当现有记录的属性发生更改时,主要有三件事
我将不添加实际的代码,因为没有太多有关交互模型的可用信息,因此在查看需求时,我将使用以下场景:我假设我有书,并且只要书名是更改或更新它时,应添加具有新值的新记录,并按将status
列更改为0
的方式保留旧记录,以便禁用该书并将旧值备份到{{1} }表。因此,基本上,您将可以使用线框来相应地调整代码。
您可以根据所使用的模型使用逻辑。
下面是示例架构
BooksBackup
模型
Books
name varchar(255)
status tinyint(1)
模型
BooksBackup
id int(11)
book_id int(11)
我将在name varchar(255)
模型中添加以下beforeSave()
函数
Books