Ошибка восстановления Laravel Soft Delete ()

Следующий код мягкого удаления мне подходит:

$post = Post::find($post_id);
$post->delete();

Поле deleted_at обновлено. Но это дает мне ошибку:

$post = Post::find($post_id);
$post->restore();

Вот ошибка:

exception 'Symfony\Component\Debug\Exception\FatalErrorException' with message 'Call to a member function restore() on a non-object'

Я в тупике. Google пока не помогает.


person sterfry68    schedule 29.08.2014    source источник


Ответы (2)


Ошибка говорит, что $post не является объектом, Laravel не возвращает удаленные записи без withTrashed()

Post::withTrashed()->find($post_id)->restore();

Документы Laravel - мягкое удаление

При запросе модели, которая использует мягкие удаления, "удаленные" модели не будут включены ...

person im_brian_d    schedule 29.08.2014
comment
Работает как шарм. Спасибо. - person moreirapontocom; 18.09.2017

Другой вариант - выполнить поиск среди моделей в мусоре по определенному идентификатору:

Post::onlyTrashed()->where('id', $post_id)->restore();
person khalid    schedule 30.01.2021
comment
Обзор: было бы неплохо добавить комментарий и пояснение к вашему ответу. - person H.Hasenack; 30.01.2021
comment
Халид, вы понимаете, что в withTrashed нет необходимости, когда вы знаете, что ищете удаленные значения? если да, то было бы хорошо это прояснить. - person lahwran; 30.01.2021
comment
withTrashed использовать для восстановления удаленного сообщения и сообщение не удалено, только trashed использовать для восстановления только сообщение удалено - person khalid; 02.02.2021