GkyKrkc
Yazarı tutan modelde:
public static function booted()
{
static::deleted(function($author) {
$author->images->each(function($image) {
$image->delete();
});
$author->videos->each(function($video) {
$video->delete();
});
});
}
şeklinde yazar silindikten sonra onunla ilgili kayıtların da silinmesini sağlayacaksınız. Burada Eloquent içerisindeki delete yöntemini kullanmak önemli. Örneğin üstte images şeklinde ilişki kurulan Image modeli olsun. Image modelinde de:
public static function booted()
{
static::deleted(function($image) {
// Burada dosyayı silin. Mesela:
// Storage::disk('images')->delete($image->file);
});
}
şeklinde kayıt silinince resmin de silinmesini sağlayacaksınız. Böylece yazar silinince nested şekilde bağlı Image modelleri de silinecek, Image modeli silindikten sonra da kayda ait fiziksel dosyayı da silecek.
Ben örneği closure event dediğimiz yolla verdim. Siz $dispatchesEvents da kullanabilirsiniz, observer da kullanabilirsiniz, event/listener da kullanabilirsiniz, kayıtların temizlenmesi çok uzun sürerse job ile kuyrukta da yapabilirsiniz, task ile günlük de kontrol edilebilir... bir çok yoldan yapılabilir.
Ben ise kesinlikle böyle nested bir silme işlemine izin vermem. Eğer yazarı ağaç, bağlı kayıtları da dal ve yapraklar kabul edersek yaprak → dal → gövde yönünde kontrollü silme yapardım, manuel. Örneğin bunun için de ayrı bir arabirim hazırlardım.