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.