Add Soft Delete Column In Laravel Migration

5 min read Jun 28, 2024
Add Soft Delete Column In Laravel Migration

Menambahkan Kolom Soft Delete dalam Migrasi Laravel

Dalam pengembangan aplikasi, terkadang kita tidak ingin benar-benar menghapus data secara permanen, melainkan hanya menandai data tersebut sebagai "terhapus". Di Laravel, fitur ini dikenal sebagai Soft Delete.

Dengan fitur ini, data yang dihapus akan tetap berada di database tetapi ditandai sebagai tidak aktif. Hal ini memungkinkan kita untuk memulihkan data yang dihapus jika diperlukan.

Berikut adalah cara menambahkan kolom soft delete dalam migrasi Laravel:

1. Tambahkan Kolom deleted_at

Pertama, kita perlu menambahkan kolom deleted_at pada tabel yang ingin kita gunakan soft delete. Kolom ini bertipe timestamp dan akan menyimpan waktu saat data dihapus.

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

class AddDeletedAtToUsersTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::table('users', function (Blueprint $table) {
            $table->softDeletes();
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::table('users', function (Blueprint $table) {
            $table->dropSoftDeletes();
        });
    }
}

Kode di atas akan menambahkan kolom deleted_at ke tabel users. Perhatikan bahwa kita menggunakan $table->softDeletes() untuk menambahkan kolom dengan tipe timestamp dan default nilai null.

2. Menggunakan Trait SoftDeletes

Selanjutnya, kita perlu menambahkan trait SoftDeletes ke model yang terkait dengan tabel tersebut. Trait ini akan menambahkan beberapa metode yang diperlukan untuk mengelola soft delete.

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

class User extends Model
{
    use SoftDeletes;

    // ...
}

Sekarang, model User sudah memiliki kemampuan untuk melakukan soft delete.

3. Menggunakan Metode delete() dan restore()

Metode delete() akan menandai data sebagai terhapus dengan mengisi kolom deleted_at dengan waktu saat ini. Sementara metode restore() akan memulihkan data yang telah dihapus dengan mengatur kolom deleted_at ke null.

// Menghapus data
$user = User::find(1);
$user->delete();

// Memulihkan data
$user = User::withTrashed()->find(1);
$user->restore();

Metode withTrashed() digunakan untuk mengambil semua data, termasuk data yang telah dihapus.

4. Querying Data yang Terhapus

Kita juga dapat melakukan query untuk mengambil data yang telah dihapus dengan menggunakan metode onlyTrashed(), withTrashed(), dan whereNotNull('deleted_at').

// Mengambil data yang terhapus
$deletedUsers = User::onlyTrashed()->get();

// Mengambil semua data (termasuk yang terhapus)
$allUsers = User::withTrashed()->get();

// Mengambil data dengan kolom deleted_at yang tidak null
$deletedUsers = User::whereNotNull('deleted_at')->get();

5. Mengatur Waktu Retensi Data

Secara default, Laravel tidak memiliki batasan waktu retensi untuk data yang dihapus. Kita dapat mengatur waktu retensi data dengan menggunakan metode deletedAtColumn pada model.

class User extends Model
{
    use SoftDeletes;

    protected $deletedAtColumn = 'deleted_at';
    protected $dates = ['deleted_at', 'deleted_at_retention'];

    public function scopeDeletedAtRetention($query, $date)
    {
        return $query->where('deleted_at_retention', '<=', $date);
    }
}

// Menghapus data dengan waktu retensi
$user->deleteAtRetention(now()->addDays(30));

// Mengambil data yang telah melewati waktu retensi
$deletedUsers = User::deletedAtRetention(now())->get();

Dengan cara ini, data yang dihapus akan secara otomatis dihapus permanen setelah melewati waktu retensi yang telah ditentukan.

Kesimpulan

Menambahkan kolom soft delete dalam migrasi Laravel sangat membantu dalam mengelola data yang tidak ingin dihapus secara permanen. Dengan menggunakan fitur ini, kita dapat memulihkan data yang dihapus jika diperlukan dan juga mengatur waktu retensi data yang dihapus.

Latest Posts