• Час читання ~0 хв
  • 20.01.2023

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.

Comments

No comments yet
Yurij Finiv

Yurij Finiv

Full stack

Про мене

Professional Fullstack Developer with extensive experience in website and desktop application development. Proficient in a wide range of tools and technologies, including Bootstrap, Tailwind, HTML5, CSS3, PUG, JavaScript, Alpine.js, jQuery, PHP, MODX, and Node.js. Skilled in website development using Symfony, MODX, and Laravel. Experience: Contributed to the development and translation of MODX3 i...

Про автора CrazyBoy49z
WORK EXPERIENCE
Контакти
Ukraine, Lutsk
+380979856297