Profile Picture About Author - yogaardiana
AuthorYogaardiana
Published

Laravel Soft Delete: Cara Bikin Fitur "Recycle Bin" dalam 5 Menit di Laravel

Pernah nggak sih kamu ada di posisi ini:


Lagi asik maintenance database atau testing fitur hapus user, tiba-tiba... JLEB!


Kamu sadar kalau kamu baru saja menghapus data yang salah. Bukan user dummy, tapi user asli. Keringat dingin mulai bercucuran, jantung berdegup kencang, dan bayangan dimarahin Tech Lead atau klien mulai menari-nari di kepala.


Kalau kamu menggunakan perintah SQL DELETE biasa, data itu hilang selamanya. Bye-bye.


Tapi, cerita horor ini nggak perlu terjadi kalau kamu menerapkan Laravel Soft Delete.


Di artikel kali ini, aku mau share kenapa fitur bawaan Laravel ini adalah "nyawa cadangan" bagi kita para developer, dan gimana cara implementasinya yang super gampang.


Apa Itu Soft Delete? (Analogi Sederhana)

Bayangkan Soft Delete itu seperti Recycle Bin atau Trash di laptop kamu.


Saat kamu menekan tombol delete pada sebuah file, file itu sebenarnya belum musnah dari hard disk. Dia cuma dipindahkan ke folder sampah. Selama kamu belum klik "Empty Recycle Bin", file itu masih bisa dikembalikan (restore) kapan saja.


Nah, Laravel Soft Delete bekerja dengan cara yang sama.


Secara teknis, saat kamu menghapus data, Laravel tidak benar-benar membuangnya dari database. Laravel hanya akan:

  1. Menandai data tersebut dengan stempel waktu (timestamp) di kolom deleted_at.
  2. Menyembunyikannya dari hasil query biasa.

Jadi, datanya masih ada, cuma lagi "ngumpet" aja.


Kenapa Kamu Wajib Pakai?

Sebagai developer, kita harus antisipasi human error. Berikut alasan kenapa fitur ini penting:

  1. Data Recovery: Salah hapus? Tinggal restore.
  2. Audit Log: Kamu jadi tahu kapan persisnya data itu dihapus.
  3. Safety Net: Memberikan rasa aman saat melakukan operasi berbahaya di database.


Tutorial Singkat Implementasi Laravel Soft Delete

Oke, cukup teorinya. Sekarang kita masuk ke coding. Percaya deh, ini nggak sampai 5 menit.

Anggap saja kita punya tabel posts. Kita ingin agar postingan blog ini bisa di-soft delete.


Langkah 1: Siapkan Migration

Kita butuh kolom deleted_at di tabel database. Kabar baiknya, Laravel sudah menyediakan helper-nya. Tambahkan $table->softDeletes(); di file migration kamu.


Schema::table('posts', function (Blueprint $table) {
$table->softDeletes(); // Ini akan membuat kolom deleted_at
});

Jangan lupa jalankan perintah keramat: php artisan migrate


Langkah 2: Panggil Trait di Model

Sekarang, kasih tahu Model Post kalau kita mau pakai fitur ini. Cukup tambahkan use SoftDeletes di dalam class model.


namespace App\Models;

use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes; // 1. Import ini

class Post extends Model
{
use SoftDeletes; // 2. Pakai Trait ini

protected $fillable = ['title', 'content'];
}


Langkah 3: Mari Kita Coba Hapus!

Sekarang, saatnya pembuktian. Coba kamu hapus data seperti biasa di Controller atau Tinker:


$post = Post::find(1);
$post->delete();

Apa yang terjadi? Jika kamu cek di database (lewat phpMyAdmin atau TablePlus), data dengan ID 1 masih ada, tapi kolom deleted_at-nya sekarang terisi waktu saat ini (tidak lagi NULL).

Kalau kamu coba query Post::all(), data tersebut tidak akan muncul. Magic!


Gimana Cara Mengembalikannya? (Restore)

Tiba-tiba klien bilang, "Eh mas, postingan yang tadi jangan dihapus dong!".

Tenang, tarik napas. Kamu cuma perlu satu baris kode untuk jadi pahlawan:


// Cari data yang sudah dihapus (withTrashed) lalu restore
Post::withTrashed()->where('id', 1)->restore();

Dan voila! Datanya muncul kembali seolah tidak pernah terjadi apa-apa. Kolom deleted_at akan kembali menjadi NULL.


Fitur Tambahan yang Perlu Kamu Tahu

Selain restore, ada beberapa method berguna lainnya:

  1. Melihat Data Sampah: Gunakan Post::onlyTrashed()->get() untuk melihat data apa saja yang sudah dihapus.
  2. Hapus Permanen: Kalau kamu yakin 100% ingin menghancurkan data (seperti Shift + Delete), gunakan:


$post->forceDelete();
  1. Warning: Kalau pakai ini, data benar-benar hilang ya!


Kesimpulan

Laravel Soft Delete adalah fitur sederhana tapi powerful yang sering diremehkan pemula. Padahal, fitur ini bisa menyelamatkan kita dari kepanikan akibat ketidaksengajaan.

Implementasinya mudah, tidak mengganggu performa secara signifikan, dan memberikan peace of mind.


Jadi, untuk data-data krusial seperti User, Transaksi, atau Produk, aku sangat menyarankan untuk selalu mengaktifkan fitur ini. Lebih baik mencegah daripada mengobati (dan dimarahin bos), kan?

Tertarik diskusi lebih lanjut soal best practice Laravel? Jangan ragu buat connect di LinkedIn aku atau kepoin project-project Laravel lainnya di halaman Portfolio. Happy Coding!


Sumber : https://laravel.com/docs/12.x/eloquent#soft-deleting


Bantu Support Aku :

Instagram : https://www.instagram.com/yogaardianaaa/

Youtube : https://www.youtube.com/@yogaardiana_dev/

Tiktok : https://tiktok.com/@yogaardianaaa

Threads : https://www.threads.com/@yogaardianaaa