• Czas czytania ~2 min
  • 20.01.2023

Laravel Usunięte modele package firmy Spatie automatycznie kopiuje usunięte modele do osobnej tabeli:

— Freek Van der Herten 🔭 (@freekmurze) 16 stycznia 2023 r

Według Freeka pisać o pakiecie, możesz myśleć o tym pakiecie jako o „koszu na modele. Pakiet osiąga to poprzez tabelę bazy danych o nazwie usunięte_modele i dodanie A Przechowuje usunięte modele do swoich modeli, że chcesz zapisywać kopie zapasowe usuniętych modeli:

use Illuminate\Database\Eloquent\Model;
use Spatie\DeletedModels\Models\Concerns\KeepsDeletedModels;

class BlogPost extends Model
{
    use KeepsDeletedModels;
}

Ten pakiet może również próbować przywrócić usunięte modele przy użyciu kilku różnych metod:

// $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);

Możesz także wejść w proces przywracania za pomocą Zamknięcia, jeśli chcesz zmodyfikować model podczas procesu przywracania. Ten pakiet ma inne opcje konfiguracji i uwagi, takie jak oczyszczanie tabeli usuniętych modeli zgodnie z harmonogramem i częstotliwość czyszczenia tej tabeli.

Możesz się zastanawiać, dlaczego miałbyś używać tego pakietu zamiast wbudowanej funkcji miękkiego usuwania w rdzeniu Laravel. Wpis Freeka Van der Hertena wykonuje doskonałą robotę, porównując kompromisy obu podejść.

Podsumowując, oto kilka zalet i wad usuwania nietrwałego:

  • ➕ Miękkie usuwanie jest bardzo wygodne
  • ➕ Brak konieczności kopiowania danych podczas „usuwania” modelu
  • ➕ Usunięte rekordy korzystają z wszelkich przyszłych zmian w schemacie tabeli
  • ➕ Podczas wysyłania zapytań do bazy danych należy pamiętać o usuwaniu miękkim (tj usunięto_at=null)
  • ➖ Integralność referencyjna podczas miękkiego usuwania powiązań modeli, należy to zrobić ręcznie
  • ➖ Cofnięcie usunięcia może być skomplikowane podczas przywracania modelu (i powiązanych modeli)

Według Freeka, oto kilka zalet i wad korzystania z oddzielnej tabeli usuniętych modeli:

  • ➕ Nie ma potrzeby dostosowywania zapytań w celu uwzględnienia usunięto_at=null
  • ➕ Baza danych może chronić integralność referencyjną — usunięcie rekordu spowoduje również usunięcie wszystkich powiązanych rekordów
  • ➕ Łatwe trwałe usuwanie starych danych
  • ➖ Trudniejsze przywrócenie usuniętych danych, ponieważ trzeba je skopiować z powrotem (w porównaniu z ustawieniem usunięto_at=null aby przywrócić model za pomocą prostych miękkich usunięć)

Możesz dowiedzieć się więcej o tym pakiecie, uzyskać pełne instrukcje instalacji i wyświetlić plik kod źródłowy na GitHubie.

Comments

No comments yet
Yurij Finiv

Yurij Finiv

Full stack

O

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...

O autorze CrazyBoy49z
WORK EXPERIENCE
Kontakt
Ukraine, Lutsk
+380979856297