Laravel Видалені моделі пакет Spatie автоматично копіює видалені моделі в окрему таблицю:
— Freek Van der Herten 🔭 (@freekmurze) 16 січня 2023 р
За словами Фріка докладно описувати про пакет, ви можете думати про цей пакет як про «кошик для моделей». Пакет досягає цього за допомогою таблиці бази даних під назвою видалені_моделі
і додавання a 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);
Ви також можете підключитися до процесу відновлення за допомогою Closure, якщо ви хочете змінити модель під час процесу відновлення. Цей пакет має інші параметри конфігурації та зауваження, як-от скорочення таблиці видалених моделей за розкладом і частоту скорочення цієї таблиці.
Ви можете запитати, чому ви використовуєте цей пакет, а не вбудовану функцію м’якого видалення в ядрі Laravel. Опис Фріка Ван дер Гертена чудово порівнює компроміси обох підходів.
Підсумовуючи, ось деякі плюси та мінуси програмного видалення:
- ➕ М'яке видалення дуже зручно
- ➕ При «видаленні» моделі копіювання даних не потрібне
- ➕ Видалені записи виграють від будь-яких майбутніх змін у схемі таблиці
- ➕ Ви повинні пам’ятати про м’які видалення під час запиту до бази даних (тобто область, де
deleted_at=null
) - ➖ Посилальна цілісність під час м’якого видалення зв’язків моделі, це потрібно зробити вручну
- ➖ Відновлення може бути складним під час відновлення моделі (і пов’язаних моделей)
А за словами Фріка, ось деякі плюси та мінуси використання окремої таблиці видалених моделей:
- ➕ Немає необхідності коригувати запити відповідно до них
deleted_at=null
- ➕ База даних може захистити посилальну цілісність — видалення запису призведе до видалення всіх пов’язаних записів
- ➕ Легко назавжди видалити старі дані
- ➖ Важче відновити видалені дані, оскільки їх потрібно копіювати назад (порівняно з налаштуванням
deleted_at=null
для відновлення моделі за допомогою простих програмних видалень)
Ви можете дізнатися більше про цей пакет, отримати повні інструкції зі встановлення та переглянути вихідний код на GitHub.