Days
Hours
Minutes
Seconds

Promo Grand Opening

15% OFF

Khusus Pelanggan Baru

Tutorial Laravel #22 : Soft Deletes Laravel

 

 

Dalam pengelolaan data, menghapus data dari database secara permanen sering kali bukan pilihan terbaik. Laravel menyediakan fitur elegan bernama Soft Deletes yang memungkinkan kita “menghapus” data tanpa benar-benar menghilangkannya dari tabel. Data yang dihapus hanya ditandai, dan tetap bisa diakses atau bahkan dikembalikan (restore) di kemudian hari.

Tutorial ini akan memandu Anda dalam mengimplementasikan Soft Deletes pada model Eloquent.


 

Apa Itu Soft Deletes?

 

Soft Deletes adalah mekanisme di mana data yang dihapus tidak benar-benar dihilangkan dari database. Laravel melakukannya dengan menambahkan kolom deleted_at ke dalam tabel Anda. Saat sebuah record dihapus, Laravel tidak menjalankan perintah DELETE SQL, melainkan hanya mengisi kolom deleted_at dengan waktu saat penghapusan terjadi.

Dengan begitu, data tersebut akan dianggap “tidak ada” oleh query Eloquent yang normal, namun tetap tersimpan di database.

 

Mengapa Menggunakan Soft Deletes?

 

  • Keamanan Data: Mencegah kehilangan data yang tidak disengaja.
  • Audit Trail: Memungkinkan Anda melacak kapan dan data apa yang “dihapus”.
  • Kemudahan Restore: Data dapat dikembalikan (restore) dengan mudah.
  • Integritas Relasi: Menjaga integritas data berelasi, karena foreign key tidak terputus.

 

Langkah 1: Modifikasi Migration

 

Untuk mengaktifkan Soft Deletes, Anda perlu menambahkan kolom deleted_at ke dalam tabel Anda. Cara termudah adalah dengan memodifikasi migration Anda atau membuat migration baru.

Jika Anda membuat tabel baru, tambahkan $table->softDeletes(); di dalam migration:

PHP

Schema::create('posts', function (Blueprint $table) {
    $table->id();
    $table->string('title');
    $table->text('body');
    $table->timestamps();
    $table->softDeletes(); // Menambahkan kolom `deleted_at`
});

Jika Anda ingin menambahkan Soft Deletes ke tabel yang sudah ada (misalnya, tabel posts), buat migration baru:

Bash

php artisan make:migration add_soft_deletes_to_posts_table --table=posts

Kemudian, modifikasi file migration tersebut:

PHP

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

public function down()
{
    Schema::table('posts', function (Blueprint $table) {
        $table->dropSoftDeletes();
    });
}

Setelah itu, jalankan migration Anda:

php artisan migrate

Sekarang, tabel Anda memiliki kolom deleted_at.


 

Langkah 2: Mengaktifkan di Model

 

Langkah selanjutnya adalah memberi tahu model Anda untuk menggunakan Soft Deletes. Buka model yang sesuai (misalnya, app/Models/Post.php) dan tambahkan trait SoftDeletes.

PHP

<?php

namespace App\Models;

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

class Post extends Model
{
    use HasFactory, SoftDeletes;
    
    // ...
}
  • use SoftDeletes;: Menggunakan trait SoftDeletes yang disediakan oleh Laravel.

 

Langkah 3: Berinteraksi dengan Soft Deletes

 

Setelah kedua langkah di atas selesai, Eloquent akan secara otomatis mengelola penghapusan data.

 

Menghapus Data (Soft Delete)

 

Untuk menghapus data, Anda cukup memanggil metode delete() seperti biasa.

PHP

use App\Models\Post;

$post = Post::find(1);
$post->delete(); // Kolom `deleted_at` akan terisi

Sekarang, jika Anda mencoba mengakses data tersebut dengan query normal, Eloquent akan menganggapnya tidak ada.

 

Mengambil Data yang Dihapus (Soft Deleted)

 

Secara default, query Eloquent tidak akan menyertakan data yang sudah di-soft delete. Untuk mengambilnya, gunakan metode withTrashed().

PHP

// Mengambil semua data, termasuk yang di-soft delete
$posts = Post::withTrashed()->get();

// Mencari satu data, termasuk yang di-soft delete
$post = Post::withTrashed()->find(1);

 

Mengambil Hanya Data yang Dihapus

 

Jika Anda hanya ingin mengambil data yang sudah di-soft delete, gunakan metode onlyTrashed().

PHP

$deletedPosts = Post::onlyTrashed()->get();

 

Mengembalikan Data (Restore)

 

Untuk mengembalikan data yang sudah di-soft delete, gunakan metode restore().

PHP

$post = Post::withTrashed()->find(1);
$post->restore(); // Mengubah nilai `deleted_at` menjadi NULL

 

Menghapus Permanen (Force Delete)

 

Jika Anda benar-benar ingin menghapus data secara permanen dari database, gunakan metode forceDelete().

PHP

$post = Post::withTrashed()->find(1);
$post->forceDelete(); // Menjalankan perintah DELETE SQL

 

Kesimpulan

 

Soft Deletes adalah fitur yang sangat kuat dan fleksibel dari Laravel. Dengan sedikit modifikasi pada migration dan model, Anda dapat menambahkan lapisan keamanan dan fleksibilitas pada manajemen data Anda. Anda dapat dengan mudah melacak data yang “dihapus”, mengembalikannya jika diperlukan, atau menghapusnya secara permanen. Penggunaan Soft Deletes sangat direkomendasikan untuk data-data penting yang tidak seharusnya hilang dari database.

Wawasan Terbaru

Gemini_Generated_Image_wfw5uwwfw5uwwfw5
Mengenal Dunia Grafis: Dari Piksel Hingga Vektor, Kekuatan Visual di Era Digital
Gemini_Generated_Image_b6dimfb6dimfb6di
Mengenal Foundation: Kerangka Kerja Front-End Profesional untuk Web Responsif
Gemini_Generated_Image_sx3ztpsx3ztpsx3z
CSS
Mempercantik Website dengan CSS: Seniman di Balik Tampilan Web 🎨
Gemini_Generated_Image_e013qke013qke013
Mengenal HTML: Fondasi dari Setiap Halaman Website 🌐
Gemini_Generated_Image_ldki4nldki4nldki
Menyelami Dunia Coding: Seni Berbicara dengan Komputer
Gemini_Generated_Image_dpvliydpvliydpvl
Menguasai GIT: Fondasi Penting dalam Dunia Pengembangan Perangkat Lunak
Gemini_Generated_Image_sqcib9sqcib9sqci
Tutorial Python #12: Mengenal Jenis-jenis Operator dalam Python
Gemini_Generated_Image_o1bw3do1bw3do1bw
Memahami Tipe Data Dictionary dalam Python
Gemini_Generated_Image_ko4ixfko4ixfko4i
Mengenal Tipe Data Set dalam Python
Gemini_Generated_Image_1xop7m1xop7m1xop
Tuple dalam Python: Pengenalan dan Tutorial

Wawasan Serupa

Gemini_Generated_Image_q0o3sbq0o3sbq0o3
Gemini_Generated_Image_mem6cgmem6cgmem6
Gemini_Generated_Image_ust09gust09gust0
Gemini_Generated_Image_d8a5kwd8a5kwd8a5

Ceritakan Detail Proyekmu

Mulai dari 30K aja, solusi IT kamu langsung jalan tanpa drama.

Kata Mereka Tentang Solusi Coding

Dipercaya oleh lebih dari 200++ client untuk menyelesaikan proyeknya dengan total 250++ proyek dari berbagai jenis proyek