Ларавель Удаленные модели package by Spatie автоматически копирует удаленные модели в отдельную таблицу:
— Фрик Ван дер Хертен 🔭 (@freekmurze) 16 января 2023 г.
По мнению Фрика записать о пакете, вы можете думать об этом пакете как о «корзине для моделей». Пакет достигает этого через таблицу базы данных, называемую удаленные_модели
и добавление KeepsDeletedModels
особенность ваших моделей, что вы хотите сохранять резервные копии удаленных моделей:
use Illuminate\Database\Eloquent\Model;
use Spatie\DeletedModels\Models\Concerns\KeepsDeletedModels;
class BlogPost extends Model
{
use KeepsDeletedModels;
}
Этот пакет также может попытаться восстановить удаленные модели, используя несколько различных методов:
// $blogPost will be restored and returned
$blogPost = BlogPost::restore(5);
// $blogPost will be returned, but it is not saved in the DB yet
$blogPost = Blogpost::makeRestored($id);
BlogPost::restoreQuietly(5);
Вы также можете подключиться к процессу восстановления с помощью замыкания, если хотите изменить модель в процессе восстановления. Этот пакет имеет другие параметры конфигурации и соображения, такие как сокращение таблицы удаленных моделей по расписанию и частота удаления этой таблицы.
Вы можете задаться вопросом, почему вы должны использовать этот пакет, а не встроенную функцию обратимого удаления в ядре Laravel. Рецензия Фрика Ван дер Хертена отлично справляется со сравнением компромиссов обоих подходов.
Таким образом, вот некоторые плюсы и минусы мягкого удаления:
- ➕ Мягкое удаление очень удобно
- ➕ Не требуется копирование данных при «удалении» модели
- ➕ Удаленные записи выигрывают от любых будущих изменений в схеме таблицы.
- ➕ Вы должны помнить об обратимом удалении при запросе к базе данных (т. е. область, в которой
delete_at = ноль
) - ➖ Ссылочная целостность при обратимом удалении ассоциаций моделей, это необходимо делать вручную
- ➖ Восстановить удаление может быть сложно при восстановлении модели (и связанных моделей)
И, по словам Фрика, вот некоторые плюсы и минусы использования отдельной таблицы удаленных моделей:
- ➕ Нет необходимости корректировать запросы для учета
delete_at = ноль
- ➕ База данных может защитить ссылочную целостность — удаление записи также приведет к удалению всех связанных записей.
- ➕ Легко безвозвратно удалить старые данные
- ➖ Сложнее восстановить удаленные данные, так как вы должны скопировать их обратно (в отличие от установки
delete_at = ноль
для восстановления модели простым программным удалением)
Вы можете узнать больше об этом пакете, получить полные инструкции по установке и просмотреть исходный код на Гитхабе.