我对yii2 ActiveRecord模型有一个一般性问题。
删除ActiveRecord模型的实例后,我可以恢复它吗?
答案 0 :(得分:2)
答案取决于。
我不知道您需要什么,但是通常您无法从数据库中恢复已删除的行。您可以做的就是@YasinPatel的建议-添加新列is_deleted
,并且可以将Model::delete()
设置为is_deleted
而不是true
。然后,在其他逻辑中,不要使用is_deleted == true
处理行。在这种情况下,这些行并没有真正删除,但是可以这样显示。同样,我不知道您的确切情况。
在极少数情况下,您想要删除某些内容(例如调用某些事件或某些内容),可以执行的操作是在事务中运行删除操作,然后将其还原。您可能并不需要这个并且不需要它,但是我相信知道它的存在是很高兴的。
答案 1 :(得分:0)
要视情况而定。
如果记录已被$model->delete()
之类的东西删除,而您仍然拥有实例$model
,那么您可以执行$model->save()
来还原它,因为即使删除了$ model实例删除前仍然具有属性值。
如果您已经丢失了$model
的实例,或者如果您从未将其放在首位(例如,由于删除是使用Model::deleteAll($condition)
之类的方法完成的,则无法恢复它)使用这种方法。
这也不会恢复任何可能被ON DELETE CASCADE
删除的相关记录。
如果您需要恢复与删除记录的请求不同的请求中的记录。您可以将$model
存储在会话中,然后从那里获取它并执行$model->save()
例如这样的
public function actionDelete()
{
$model = Author::findOne(2);
$model->delete();
Yii::$app->session->set('model', $model);
}
public function actionRestore()
{
if (Yii::$app->session->has('model')) {
$model = Yii::$app->session->get('model');
$model->save();
}
}