Laravel ile Soft Deleting (Yazılımsal Silme)

Aslında veritabanınızdaki kayıtları kaldırmanın yanı sıra, Eloquent modeli “Soft Deleting” de yapabiliyor. Model Soft Deleting ile silindiğinde, aslında veritabanından kaldırılmazlar. Bunun yerine deleted_at sütununa tarih ve saat eklenir. Bir modelde boş olmayan bir deleted_at değere sahipse, model Soft Deleting ile silinmiştir.

Soft Deleting nasıl aktif edilir?

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;

class Uye extends Model
{
    // Bu SoftDeletes özelliği deleted_at sütununa otomatik olarak sizin için bir DataTime/Carbon örneği aktaracaktır.
    use SoftDeletes;
}

Ayrıca deleted_at sütunu veritabanı tablonuza eklemelisiniz. Laravel şema oluşturucu bu sütunu oluşturmak için yardımcı bir yöntem içerir.

Schema::table('makaleler', function (Blueprint $table) {
    $table->softDeletes(); // deleted_at
});

Şimdi modeldeki delete yönetimini çağırdığımızda deleted_at sütununa geçerli tarih ve saati ekleyecektir. Soft Deleting kullanan bir modeli sorgularken, Soft Deleting ile silinen modeller otomatik olarak tüm sorgu sonuçlarının dışında tutulur.

Belirli bir model örneğinin Soft Deleting ile silinip silinmediğini belirlemek için trashed yöntemi kullanın.

if ($makale->trashed()){
    //
}

Soft Deleting ile Silinmiş Modelleri Sorgulama

Yukarıda belirlediğimiz gibi, Soft Deleting ile silinmiş modeller otomatik olarak sorgu sonuçlarından çıkartılacaktır. Ancak, Soft Deleting ile silinmiş modelleri withTrashed yönetimini sorguda kullanarak sonuç kümesinde görünmeye zorlayabilirsiniz.

$makaleler = App\Makale:withTrashed()->where('user_id', 1)->get();

Bu withTrashed yöntemi bir ilişki sorgusunda da kullanılabilir.

$uyeler->makaleler()->withTrashed()->get();

Yalnızca Soft Deleting ile silinmiş Modelleri Alma

onlyTrashed Yöntemi sadece Soft Deleting ile silinen modelleri alır.

$makaleler = App\Makale::onlyTrashed()->where('user_id', 1)->get();

Soft Deleting ile Silinmiş Modelleri Geri Yükleme

Bazen Soft Deleting ile silinmiş bir modeli “geri almak” isteyebiliriz.
Soft Deleting ile silinmiş bir modeli aktif duruma geri yüklemek için restore yöntemini kullanın.

$makale->restore();

restore yöntemini birden çok modeli hızlıca geri yüklemek için sorguda kullanabilirsiniz.

App\Makale::withTrashed()->where('user_id', 1)->restore();

withTrashed Yöntemi gibi restore yöntemi de ilişkilerde kullanılabilir.

$uye->makaleler()->restore();

Kalıcı Olarak Silme

Bazen bir modeli veritabanınızdan gerçekten kaldırmanız gerekebilir.
Soft Deleting ile siliniş bir modeli veritabanınızdan kalıcı olarak kaldırmak için forceDelet yönetemini kullanın

// Tek bir model örneği için kalıcı silme
$makale->forceDelete();

// Tüm ilişkili modelleri kalıcı silme
$uye->makaleler()->forceDelete();

PHP içinde yayınlandı

Bir cevap yazın