Laravel soft delete nədir?

Farid Babayev
2 min readMar 3, 2020

--

laravel soft delete

Salam dostlar, bu gün sizlərlə bir yerdə soft delete nədir? nə işə yarayır? və niyə lazımdır? suallarına cavab tapmağa çalışacağıq.

İlk öncə temaya girməmişdən qabaq qarşılaşdığımız problemdən danışaq sonra həll yolundan. Bildiyimiz kimi bu dövrdə ən vacib şey datadır. Data demək güc deməkdir. Nə qədər çox data yığılsa o qədər yaxşıdır (Əgər düzgün analiz edilsə təbii ki). Fikir vermisinizsə bəzi saytlarda hesabımı sil ( delete my account ) bölməsi var. Nədir bəs bu? həqiqətən o bölmə real olaraq bizə aid olan bütün məlumatları silirmi?. Hesabı silmək indiyə kimi etdiyimiz hərəkətləri də silmək deməkdir o zaman. Bəyəndiyimiz postlar və s. O bölməni istifadə edəndən sonra bütün etfiyimiz şeylər sayta da görsənmir. Gələk əsas temaya. Həqiqətən silinirmi? silinməlidirmi? Bu sualin cavabi şirkətin istəyindən asılıdır. Bəlkə də silirlər. Amma məncə ağlı başında olan şirkətlər datanı silməz :)) . Təsəvvür edək ki, bizdən belə bir şey istədilər. Elə etməliyik ki, istifadəçi məlumatını silsin. Ən azından silinmiş kimi görsənsin amma sismemimizdə qalsın sadəcə saytda görsənməsin.

Bu yerdə temaya soft delete girir. Adamlar fikirləşmiş sonra demişlər ki, ağa datanı silmək əvəzinə databazada bir dənə əlavə delete_at stünü əlavə edək. Əgər həmin data silinsə silinmə vaxtını o stüna əlavə edək. Silinməmişlər isə həmin stünü boş olanlar olsun. Bir baxımdan qaralama və ya zibil qabı bölməsi kimi də düşünmək olar.

soft delete trash

Temanın məqsədini və işləmə prinsipini bildikdən sonra keçək laraveldə necə istifadə olunduğunu oyrənməyə. Laraveldə miqrasiya (miqration) istifadə edənlər görmüş olar. Standart timestamps metodu istifadə olunur. Bu metod standart olaraq created_atupdated_atstünu yaradır. Həmin metodun yanına bir dənə dəsoftDeletes əlavə edək.

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

Sonra isə modelə SoftDeletes trait-ni əlavə eləmək lazımdır.Bu trait-in daxilində trashed, withTrashed metodları vardır. İstifadə edə bilməyimiz üçün modeldə çağırmağımız lazımdır.

namespace App;

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

class Flight extends Model
{
use SoftDeletes;
}

Beləliklə siz delete metodunu istifadə edən zaman laravel datani real olaraq deyil avtomatik həmin delete_at stünuna silinmə vaxtını əlavə edir.

Temanı anladığımıza görə daha ətraflı məlumatı laravelin rəsmi səhifəsindən oxuyaq :))

Məndən bu qədər dostlar. Happy coding zad :)

--

--