design

Laravel'de Soft Delete: Verileri Güvenli Bir Şekilde "Silme"

April 4, 2025


Laravel'de Soft Delete: Verileri Güvenli Bir Şekilde "Silme" ♻️🛡️

"Verileri silmek gerçekten gerekli mi?" Laravel'in Soft Delete özelliğiyle verilerinizi gerçekten silmeden nasıl güvenle yöneteceğinizi öğrenelim!


1. Soft Delete Nedir? 🤔

Soft Delete (Yumuşak Silme), veritabanından tamamen silmek yerine:

  • deleted_at sütununu doldurur 📅
  • Veriyi "silinmiş" olarak işaretler 🏷️
  • Geri getirme imkanı sağlar ↩️


// Normal silme (Hard Delete)
$user->delete(); // Veri TAMAMEN silinir

// Soft Delete
$user->delete(); // Sadece deleted_at dolar


2. Modelde Soft Delete Aktif Etme 🛠️

Migration:

Schema::table('users', function (Blueprint $table) {
    $table->softDeletes(); // deleted_at sütunu ekler
});


Model:

use Illuminate\Database\Eloquent\SoftDeletes;

class User extends Model
{
    use SoftDeletes;
    
    protected $dates = ['deleted_at'];
}


3. Soft Delete Kullanım Senaryoları 💡

SenaryoHard DeleteSoft DeleteKullanıcı hesap silme❌ Riskli✅ GüvenliSipariş iptali❌ Veri kaybı✅ İz bırakırİçerik moderasyonu❌ Geri dönüşsüz✅ Geri yükleme


4. Temel Soft Delete İşlemleri 🔄

Silinmiş Kayıtları Sorgulama

// Aktif kayıtlar (silinmemiş)
User::all(); 

// Sadece silinmişler
User::onlyTrashed()->get();

// Tüm kayıtlar (silinenler dahil)
User::withTrashed()->get();


Geri Getirme

$user->restore(); // Tekli
User::onlyTrashed()->restore(); // Toplu


Tamamen Silme

$user->forceDelete(); // Veritabanından kalıcı siler


5. İlişkilerde Soft Delete 🧩

Cascade Soft Delete


class User extends Model
{
    protected static function boot()
    {
        parent::boot();

        static::deleting(function($user) {
            $user->posts()->delete(); // İlişkili postları da soft delete
        });
        
        static::restoring(function($user) {
            $user->posts()->restore(); // Geri getirirken postları da restore
        });
    }
}


İlişkili Modelleri Kontrol Etme

// Silinmemiş postları getir
$user->posts()->withoutTrashed()->get();

// Sadece silinmiş postlar
$user->posts()->onlyTrashed()->get();


6. Global Scope ile Otomatik Filtreleme 🌐

class User extends Model
{
    protected static function boot()
    {
        parent::boot();
        
        static::addGlobalScope('not_deleted', function (Builder $builder) {
            $builder->whereNull('deleted_at');
        });
    }
}


7. Pratik Kullanım Örnekleri 🛠️

Admin Paneli İçin Tüm Kayıtlar

// AdminController
public function index()
{
    return User::withTrashed()->get();
}


Çöp Kutusu (Trash Bin) Sistemi

// TrashController
public function index()
{
    return view('users.trash', [
        'users' => User::onlyTrashed()->get()
    ]);
}

public function restore($id)
{
    User::onlyTrashed()->findOrFail($id)->restore();
    return back();
}


Performans ve Depolama Optimizasyonu ⚡

ÖzellikAvantajDezavantajVeri Kurtarma✅ Kolay geri yükleme❌ Daha fazla depolamaVeri Bütünlüğü✅ İlişkiler korunur❌ Karmaşık sorgularPerformans⚠️ Küçük performans etkisi🚀 Hard delete'den yavaş

Sonuç: Silmek Yerine Arşivleyin! 🗄️

Soft Delete ile:

  • Veri kaybını önleyin 🛡️
  • Geri dönüş imkanı sağlayın ↩️
  • Veri bütünlüğünü koruyun 🔗
Projelerinizde soft delete kullanıyor musunuz? Deneyimlerinizi yorumlarda paylaşın! 💬
Bir sonraki yazımız: 🚀 [Laravel'de API Caching: Hızlı ve Verimli API Tepkileri] - API'nizi turbo hızına çıkarın!

#Laravel #Database #SoftDelete #WebDevelopment #Backend 🚀

7 + 4 =