Soft delete işlemi veritabanı tablomuzdaki veriyi tamamen kaldırmak yerine silinmiş olarak kayıt altına almaya yarayan ve daha sonra duruma göre geri getirmemize olanak sağlayan bir yöntemdir. Kısacası çöp kutusu mantığıdır. Bir şeyi silmek istediğimizde tamamen kaldırmak yerine önce çöp kutusuna atarız. Daha sonra silmek istersek çöp kutusunu temizleriz.
Bunu yapmak için kullanmak istediğimiz model dosyasını açıyoruz.

Model dosyamız

1
2
3
4
5
6
7
8
9
10
11
12
namespace App;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;
class Flight extends Model
{
    use SoftDeletes;
    protected $dates = [‘deleted_at’];
}
  • SoftDeletes trait’ ini ve delete_at  sütunumuzu modelimizde tanımlıyoruz.
  • Daha sonra migration dosyamızı açıyoruz. (burada örnek modelimiz Flight migration dosyamızda flights olsun)

create_flights_table.php

1
2
3
Schema::table(‘flights’, function ($table) {
    $table->softDeletes();
});
  • Dikkat edin burada tanımladığımız işlemde Schema : : create metodunu değil Schema : : table metodunu kullandık.
  • Dikkat edilmesi gereken bir diğer durum da eğer migrate seed yapılacaksa model dosyasında  “use SoftDeletes” traitini yorumsatırı yapıp, daha sonra migrate seed yapmak ve ardından   “use SoftDeletes” traitini koda dahil etmemiz gerekir.
  • Bunu yapmazsak
     Column not found: 1054 Unknown column ‘fligts.deleted_at’ in ‘where clause’

tarzında migrate aşamasında hata alırız.

  • Alternatif olaraksa migrate seed yapmadan soft delete işlemi için migrate update yazılırak soft delete projeye dahil edilir. Böylece

Geçmiş verilerimizin kaybetmeden tablomuza delete_at sütununu dahil edebiliriz.

Sadece silinmiş öğelere ulaşabilmek için:

1
$fligts= App\Flight::onlyTrashed()->where(‘id’, 2)->get();

Silinmiş içereği geri almak için :

1
App\Flight::withTrashed()->where(‘id’, 1)->restore();

Kalıcı olarak veriyi silmek istersek :

1
$fligts->forceDelete();