Можно ли восстановить удаленный экземпляр activeRecord в yii2? - PullRequest
0 голосов
/ 27 сентября 2019

У меня общий вопрос относительно модели ActiveGecord yii2.
Когда экземпляр модели ActiveRecord удаляется, могу ли я его восстановить?

Ответы [ 2 ]

1 голос
/ 27 сентября 2019

Ответ зависит.

Я не знаю, что вам нужно, но обычно вы не можете восстановить удаленную строку из БД.То, что вы можете сделать, это то, что рекомендовал @YasinPatel - добавьте новый столбец is_deleted, и вместо Model::delete() вы можете установить is_deleted в true.Тогда в другой логике не обрабатывайте строки с is_deleted == true.В этом случае строки на самом деле не удаляются, но могут выглядеть так.Опять же, я не знаю вашего точного случая.

В тех редких случаях, когда вы хотите что-то удалить, возможно, вызвать какие-то события или что-то, что вы можете сделать, это запустить удаление в транзакции, а затем отменитьЭто.Вы, вероятно, не просите об этом и не нуждаетесь в этом, но я считаю, что хорошо осознавать, что это существует.

0 голосов
/ 27 сентября 2019

Это зависит от ситуации.

Если запись была удалена чем-то вроде $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();
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...