Laravel Soft Deletes – Dari sekian banyak fitur yang tersedia pada eloquent, salah satu yang saya suka yaitu fitur soft deletes..
Laravel Soft Deletes – Apa itu Soft Deletes?
Soft deletes adalah tekhnik penghapusan data secara sementara pada suatu database..
Jadi ketika kita menghapus data tersebut, maka data tersebut akan hilang dari list data yang kita tampilkan, tapi sebetulnya data tersebut tidak benar-benar terhapus, kalo kita cek langsung kedalam database nya, data tersebut masihlah ada..
Anggap saja seperti fungsi recycle bin pada microsoft windows, ketika kita menghapus sebuah file/folder, maka data tersebut tidak akan langsung terhapus secara permanen, tapi akan masuk kedalam recycle bin terlebih dahulu..
Nah baru nanti dari recycle bin, kita bisa menghapus data tersebut secara permanen atau bahkan juga bisa me restore nya kembali..
Sekarang langsung saja kita coba untuk cara penggunaan nya..
Persiapan..
Dalam studi kasus ini, kita akan menggunakan Laravel versi 8, disini saya beranggapan bahwa teman-teman sudah berhasil instalasi laravel nya..
Untuk panduan cara instalasi nya bisa teman-teman buka disini..
Kemudian untuk database nya, sebetulnya kita masih menggunakan database yang sama pada kasus Belajar CRUD Laravel dari 0 sampai mahir..
Kita masih menggunakan table yang sama yaitu table siswas, bagi teman-teman yang tidak mengikuti serial tutorial Belajar CRUD pada Laravel, silahkan buat table sendiri dengan struktur seperti berikut:
Name | Type | Attributes | Null | Extra |
---|---|---|---|---|
id | bigint | UNSIGNED | No | Auto Increments |
nama | varchar(255) | No | ||
nisn | varchar(255) | No | ||
no_hp | varchar(255) | No | ||
varchar(255) | No | |||
alamat | text | No | ||
created_at | timestamp | Yes | ||
updated_at | timestamp | Yes | ||
deleted_at | timestamp | Yes |
Hanya saja untuk penggunaan soft delete, kita wajib menambahkan kolom baru yaitu deleted_at..
Jadi salah satu syarat penggunaan soft delete pada laravel adalah wajib ada kolom deleted_at pada table tersebut..
Setelah table siswas terbentuk, silahkan kalian isi dengan dummy data terlebih dahulu, isi dengan data asal-asalan saja gpp, atau kalian juga bisa menggunakan teknik seeding dan faker pada laravel yang sebelum nya sudah kita pelajari..
Baca Juga : Belajar Seeding dan Faker di Laravel dari 0..
Atau kalo pengen cepet, teman-temen juga bisa download file .sql table siswas disini..
Tampilkan datanya terlebih dahulu..
Nah setelah table siswas nya terpasang, dan sudah diisi dengan dummy data menggunakan seeding dan Faker, sekarang kita tampilkan datanya terlebih dahulu..
Kita buat SiswaController dengan perintah:
php artisan make:controller SiswaController
Kita buat juga model Siswa nya dengan perintah:
php artisan make:model Siswa
Kemudian kita panggil controller nya dan buat route baru didalam file web.php..
../routes/web.php
Tambahkan route baru seperti berikut:
.... use App\Http\Controllers\SiswaController; Route::get('siswa/list',[SiswaController::class,'index']); ....
Pertama kita panggil dulu controller nya dengan perintah:
use App\Http\Controllers\SiswaController;
Kemudian kita buat route baru dengan method get, url nya yaitu ‘siswa/list‘, kita mengarahkan nya ke SiswaController function index..
Route::get('siswa/list',[SiswaController::class,'index']);
Sekarang kita buka file SiswaController nya..
..../app/Http/Controllers/SiswaController.php
Kemudian didalam nya kita buat function baru dengan nama index:
use App\Models\Siswa; .... class SiswaController extends Controller { public function index(){ $data = Siswa::all(); return view('siswa.index',compact('data')); } } ....
Pertama kita panggil dulu model Siswa nya dengan perintah ‘use App\Models\Siswa;’..
Didalam function index, kita men define variable data yang mana variabel data tersebut digunakan untuk menampung seluruh data siswa..
.... $data = Siswa::all(); ....
Kemudian kita arahkan ke view siswa/index, dan kita juga mempassing variabel data nya kedalam view tersebut dengan perintah compact..
.... return view('siswa.index',compact('data')); ....
Sekarang kita buat file view nya..
../resources/views/siswa/index.blade.php
Didalam folder view kita buat folder baru bernama siswa, kemudian didalam folder siswa tersebut kita buat file baru dengan nama index.blade.php..
Kita buka file index nya, kemudian kita isi seperti berikut:
<!DOCTYPE html> <html> <head> <title>sangcahaya.id</title> <link rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.1/dist/css/bootstrap.min.css"> </head> <body> <div class="container"> <div class="row"> <div class="col-md-12"> <div class="table-responsive"> <table class="table table-hover"> <thead> <tr> <th>Action</th> <th>Nama</th> <th>NISN</th> <th>No HP</th> <th>Email</th> <th>Alamat</th> <th>Created At</th> <th>Updated At</th> </tr> </thead> <tbody> @foreach($data as $dt) <tr> <td> <a href="{{ url('siswa/delete/'.$dt->id) }}">Hapus</a> </td> <td>{{$dt->nama}}</td> <td>{{$dt->nisn}}</td> <td>{{$dt->no_hp}}</td> <td>{{$dt->email}}</td> <td>{{$dt->alamat}}</td> <td>{{$dt->created_at}}</td> <td>{{$dt->updated_at}}</td> </tr> @endforeach </tbody> </table> </div> </div> </div> </div> <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min.js" integrity="sha512-894YE6QWD5I59HgZOGReFYm4dnWc1Qt5NtvYSaNcOP+u1T9qYdvdihz0PPSiiqn/+/3e7Jo4EaG7TubfWGUrMQ==" crossorigin="anonymous" referrerpolicy="no-referrer"></script> <script type="text/javascript" src="https://cdn.jsdelivr.net/npm/bootstrap@5.0.1/dist/js/bootstrap.min.js"></script> </body> </html>
Diatas kita membuat sebuah table untuk menampilkan list data siswa nya.. table tersebut memiliki kolom header sebagai berikut:
.... <thead> <tr> <th>Action</th> <th>Nama</th> <th>NISN</th> <th>No HP</th> <th>Email</th> <th>Alamat</th> <th>Created At</th> <th>Updated At</th> </tr> </thead> ....
Kemudian didalam tbody kita nge foreach variable data nya, dimana variable data tersebut sudah kita isi dengan data siswa..
<tbody> @foreach($data as $dt) <tr> <td> <a href="{{ url('siswa/delete/'.$dt->id) }}">Hapus</a> </td> <td>{{$dt->nama}}</td> <td>{{$dt->nisn}}</td> <td>{{$dt->no_hp}}</td> <td>{{$dt->email}}</td> <td>{{$dt->alamat}}</td> <td>{{$dt->created_at}}</td> <td>{{$dt->updated_at}}</td> </tr> @endforeach </tbody>
Coba kita perhatikan script di atas, pada kolom pertama yaitu kolom action, kita membuat sebuah button hapus yang mengarah ke url ‘siswa/delete/parameter_id_siswanya’..
Nantinya url tersebut akan kita gunakan sebagai url untuk hapus data nya..
Sekarang kalo kita buka url nya:
http://127.0.0.1:8000/siswa/list
Maka seharusnya akan tampil seperti berikut:

Diatas adalah tampilan dari list data siswa nya..
Sekarang kita mulai untuk Soft Delete nya..
Coba kita perhatikan lagi kolom action nya, disana kita sudah membuat button url seperti berikut:
<a href="{{ url('siswa/delete/'.$dt->id) }}">Hapus</a>
Dimana pada button tersebut kita mengarahkan ke url ‘siswa/delete/{id_siswa}’..
Sekarang kita buka kembali file web.php nya, dan buat route baru seperti di atas..
../routes/web.php
.... Route::get('siswa/delete/{id}',[SiswaController::class,'hapus']); ....
Route tersebut akan meng handle proses penghapusan data nya, kita menggunakan method get, kemudian kita arahkan ke SiswaController function hapus..
Sekarang kita buka SiswaController nya:
../app/Http/Controllers/SiswaController.php
Didalam SiswaController kita buat sebuah function baru dengan nama hapus seperti berikut:
public function hapus($id){ $siswa = Siswa::find($id); $siswa->delete(); return redirect('siswa/list'); }
Pada function hapus terdapat 1 parameter, yaitu parameter id siswa nya, ini sesuai dengan yang di define pada route nya di file web.php..
public function hapus($id){
Kemudian didalam function hapus kita membuat perintah untuk hapus datanya menggunakan teknik eloquent, setelah proses penghapusan data berjalan lancar, kita arahkan kembali ke halaman ‘siswa/list’..
$siswa = Siswa::find($id); $siswa->delete(); return redirect('siswa/list');
Selanjutnya kita butuh beberapa konfigurasi didalam Models Siswa nya..
../app/Models/Siswa.php
<?php namespace App\Models; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\SoftDeletes; class Siswa extends Model { use HasFactory; use SoftDeletes; protected $dates = ['deleted_at']; }
Coba perhatikan model diatas, kita melakukan beberapa konfigurasi..
Pertama karena kita menggunakan fitur soft deletes, maka kita panggil dulu softdeletes nya:
.... use Illuminate\Database\Eloquent\SoftDeletes; ....
Kemudian didalam class nya kita panggil perintah:
.... use SoftDeletes; ....
Setelah itu kita juga mendefine property dates terhadap kolom deleted_at:
.... protected $dates = ['deleted_at']; ....
Nah sekarang coba teman-teman buka lagi halaman list siswa nya, kemudian klik salah satu button hapus nya..

Maka data tersebut akan menghilang dari list data siswa nya..
Tapi kalo kita cek langsung ke database nya, data tersebut sebetulnya tidaklah benar-benar terhapus, tapi masih ada datanya..

Yang jadi pembeda nya yaitu untuk data yang sudah dihapus, kolom deleted_at nya akan terisi waktu kapan data tersebut dihapus..
Nah sampai sini sebetulnya kita sudah berhasil menjalankan perintah soft deletes pada laravel..
Menampilkan data yang sudah dihapus
Sekarang kita akan coba menampilkan data yang sebelumnya sudah kita hapus..
Pertama didalam halaman list siswa, kita akan tambahkan sebuah button baru dibagian atas untuk mengarahkan kita ke halaman baru yang berisi data-data yang sudah dihapus..
Kita buka file view nya:
../resources/views/siswa/index.blade.php
Kemudian kita modifikasi seperti berikut:
<!DOCTYPE html> <html> <head> <title>sangcahaya.id</title> <link rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.1/dist/css/bootstrap.min.css"> </head> <body> <div class="container"> <div class="row"> <div class="col-md-12"> <button class="btn btn-lg btn-primary" style="margin-top: 20px;"> <a href="{{ url('siswa/list/trash') }}" style="color: white;">List Data Yang Sudah Dihapus (Recycle Bin)</a> </button> <div class="table-responsive"> <table class="table table-hover"> <thead> <tr> <th>Action</th> <th>Nama</th> <th>NISN</th> <th>No HP</th> <th>Email</th> <th>Alamat</th> <th>Created At</th> <th>Updated At</th> </tr> </thead> <tbody> @foreach($data as $dt) <tr> <td> <a href="{{ url('siswa/delete/'.$dt->id) }}">Hapus</a> </td> <td>{{$dt->nama}}</td> <td>{{$dt->nisn}}</td> <td>{{$dt->no_hp}}</td> <td>{{$dt->email}}</td> <td>{{$dt->alamat}}</td> <td>{{$dt->created_at}}</td> <td>{{$dt->updated_at}}</td> </tr> @endforeach </tbody> </table> </div> </div> </div> </div> <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min.js" integrity="sha512-894YE6QWD5I59HgZOGReFYm4dnWc1Qt5NtvYSaNcOP+u1T9qYdvdihz0PPSiiqn/+/3e7Jo4EaG7TubfWGUrMQ==" crossorigin="anonymous" referrerpolicy="no-referrer"></script> <script type="text/javascript" src="https://cdn.jsdelivr.net/npm/bootstrap@5.0.1/dist/js/bootstrap.min.js"></script> </body> </html>
Coba perhatikan, dibagian atas table, di atas element div class=”table-responsive”, kita menambahkan sebuah button baru..
.... <button class="btn btn-lg btn-primary" style="margin-top: 20px;"> <a href="{{ url('siswa/list/trash') }}" style="color: white;">List Data Yang Sudah Dihapus (Recycle Bin)</a> </button> ....
Di Button tersebut kita mengarahkan ke url ‘siswa/list/trash’, dimana nanti url tersebut juga akan kita buat di file web.php nya..
Kita sedikit poles juga dengan style css margin-top: 20px;, agar button tersebut memiliki jarak dengan element di atas nya, kemudian juga “style=”color:white;” agar warna font nya menjadi putih..
Kalo kita buka halaman list siswa nya, seharusnya akan muncul sebuah button seperti berikut:
Sekarang selanjutnya kita buka kembali file web.php nya, dan tambahkan route baru sesuai dengan url di button diatas..
../routes/web.php
.... Route::get('siswa/list/trash',[SiswaController::class,'trash']); ....
Pada route tersebut kita masih mengarahkan nya ke SiswaController, function trash..
Jadi langsung aja kita buka file SiswaController nya, dan tambahkan sebuah function baru dengan nama trash..
../app/Http/Controllers/SiswaController.php
.... public function trash(){ $data = Siswa::onlyTrashed()->get(); return view('siswa.index_trash',compact('data')); } ....
Pada function trash diatas, didalam nya kita mendefine sebuah variable data, dimana variable data kita gunakan untuk menampung data siswa nya..
Hanya saja, data siswa yang diambil yaitu yang data nya sudah dihapus saja dengan menggunakan perintah onlyTrashed()..
Kemudian kita mengarahkan nya ke file view index_trash, sekaligus mempassing variabel data nya kedalam view tersebut menggunakan perintah compact..
Selanjutnya kita buat file view baru dengan nama index_trash.blade.php didalam folder siswa, kemudian kita isi seperti berikut:
../resources/views/siswa/index_trash.blade.php
<!DOCTYPE html> <html> <head> <title>sangcahaya.id</title> <link rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.1/dist/css/bootstrap.min.css"> </head> <body> <div class="container"> <div class="row"> <div class="col-md-12"> <button class="btn btn-lg btn-primary" style="margin-top: 20px;"> <a href="{{ url('siswa/list') }}" style="color: white;">Kembali</a> </button> <div class="table-responsive"> <table class="table table-hover"> <thead> <tr> <th>Action</th> <th>Nama</th> <th>NISN</th> <th>No HP</th> <th>Email</th> <th>Alamat</th> <th>Created At</th> <th>Updated At</th> </tr> </thead> <tbody> @foreach($data as $dt) <tr> <td> <a href="{{ url('siswa/restore/'.$dt->id) }}">Restore</a> </td> <td>{{$dt->nama}}</td> <td>{{$dt->nisn}}</td> <td>{{$dt->no_hp}}</td> <td>{{$dt->email}}</td> <td>{{$dt->alamat}}</td> <td>{{$dt->created_at}}</td> <td>{{$dt->updated_at}}</td> </tr> @endforeach </tbody> </table> </div> </div> </div> </div> <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min.js" integrity="sha512-894YE6QWD5I59HgZOGReFYm4dnWc1Qt5NtvYSaNcOP+u1T9qYdvdihz0PPSiiqn/+/3e7Jo4EaG7TubfWGUrMQ==" crossorigin="anonymous" referrerpolicy="no-referrer"></script> <script type="text/javascript" src="https://cdn.jsdelivr.net/npm/bootstrap@5.0.1/dist/js/bootstrap.min.js"></script> </body> </html>
Sekarang kalo kita klik button yang barusan kita buat, atau kita coba akses url:
http://127.0.0.1:8000/siswa/list/trash
Maka kita akan diarahkan kehalaman list data siswa yang sebelumnya sudah kita hapus seperti pada gambar berikut:
Diatas juga kita sudah membuat button action restore untuk mengembalikan data yang sudah dihapus..
Button tersebut sudah kita arahkan ke url “siswa/restore/{id_siswa}”..
Nantinya url tersebut juga akan kita buat kedalam file web.php nya..
Me-restore data yang sudah dihapus / Mengembalikan data yang sudah dihapus..
Me restore maksudnya adalah mengembalikan data yang sebelumnya sudah dihapus, jadi nanti data yang sudah di restore akan muncul lagi dihalaman list data siswa nya..
Sekarang kita buat route baru dulu, di buka aja file web.php nya..
../routes/web.php
.... Route::get('siswa/restore/{id_siswa}',[SiswaController::class,'restore']); ....
Untuk route baru nya kita menggunakan method get, dan url nya mengarah ke “siswa/restore/{id_siswa}”.. Ini sesuai dengan url yang ada di button restore nya..
Kemudian route restore ini juga mengarah ke SiswaController function restore..
Jadi sekarang kita langsung aja buka file SiswaController nya, dan tambahkan sebuah function baru dengan nama restore:
../app/Http/Controllers/SiswaController.php
.... public function restore($id){ $siswa = Siswa::onlyTrashed()->where('id',$id); $siswa->restore(); return redirect('siswa/list/trash'); } ....
Pada function restore di atas kita membawa parameter id, yaitu id dari siswa nya..
Kemudian didalam function restore nya kita cari data berdasarkan id siswa nya, kemudian kita jalankan perintah restore()..
Setelah itu kita arahkan kembali ke url siswa/list/trash..
Sekarang kita coba refresh halaman list siswa trash nya, kemudian klik button restore, pastikan data tersebut hilang dari list trash dan akan kembali muncul di list siswa nya..
Merestore semua data sekaligus..
Kalo tadi sebelumnya kita merestore data per 1 baris, maka untuk sekarang kita akan me restore semua data yang sudah dihapus secara sekaligus dalam 1 kali klik..
Jadi sekarang dihalaman list siswa trash nya, kita buat sebuah button baru di bagian atas untuk merestore all data.. Kita letakkan button baru ini disamping button “Kembali”..
Kita modifikasi file index_trash.blade.php nya hingga menjadi seperti berikut:
../resources/views/siswa/index_trash.blade.php
<!DOCTYPE html> <html> <head> <title>sangcahaya.id</title> <link rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.1/dist/css/bootstrap.min.css"> </head> <body> <div class="container"> <div class="row"> <div class="col-md-12"> <button class="btn btn-lg btn-primary" style="margin-top: 20px;"> <a href="{{ url('siswa/list') }}" style="color: white;">Kembali</a> </button> <button class="btn btn-lg btn-success" style="margin-top: 20px;"> <a href="{{ url('siswa/restore/all') }}" style="color: white;">Restore All</a> </button> <div class="table-responsive"> <table class="table table-hover"> <thead> <tr> <th>Action</th> <th>Nama</th> <th>NISN</th> <th>No HP</th> <th>Email</th> <th>Alamat</th> <th>Created At</th> <th>Updated At</th> </tr> </thead> <tbody> @foreach($data as $dt) <tr> <td> <a href="{{ url('siswa/restore/'.$dt->id) }}">Restore</a> </td> <td>{{$dt->nama}}</td> <td>{{$dt->nisn}}</td> <td>{{$dt->no_hp}}</td> <td>{{$dt->email}}</td> <td>{{$dt->alamat}}</td> <td>{{$dt->created_at}}</td> <td>{{$dt->updated_at}}</td> </tr> @endforeach </tbody> </table> </div> </div> </div> </div> <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min.js" integrity="sha512-894YE6QWD5I59HgZOGReFYm4dnWc1Qt5NtvYSaNcOP+u1T9qYdvdihz0PPSiiqn/+/3e7Jo4EaG7TubfWGUrMQ==" crossorigin="anonymous" referrerpolicy="no-referrer"></script> <script type="text/javascript" src="https://cdn.jsdelivr.net/npm/bootstrap@5.0.1/dist/js/bootstrap.min.js"></script> </body> </html>
Coba kita perhatikan script diatas, pada baris ke 18 kita menambahkan sebuah button baru untuk merestore all data secara sekaligus dengan sekali klik..
Kalo kita refresh halaman list siswa trash nya, maka seharusnya akan muncul sebuah button baru seperti pada gambar berikut:
Pada button tersebut kita mengarahkan ke url “siswa/restore/all”, oleh karena itu sekarang kita buat route baru lagi di file web.php dengan url tersebut..
../routes/web.php
.... Route::get('siswa/restore/all',[SiswaController::class,'restore_all']);
Pada route tersebut kita menggunakan method get dan url nya mengarah ke “siswa/restore/all”, url ini sesuai dengan yang ada pada button restore all..
Masih menggunakan controller yang sama yaitu “SiswaController” dan mengarah ke function “restore_all”..
Maka sekarang kita buka SiswaController nya, dan buat function baru dengan nama restore_all..
../app/Http/Controllers/SiswaController.php
public function restore_all(){ $siswa = Siswa::onlyTrashed(); $siswa->restore(); return redirect('siswa/list/trash'); }
Coba kita perhatikan isi dari function restore_all(), pertama kita get dulu semua data siswa yang sudah dihapus..
$siswa = Siswa::onlyTrashed();
Kemudian kita restore semua data tersebut dengan perintah restore();
$siswa->restore();
Setelah itu kita arahkan kembali sistem ke halaman list siswa trash..
return redirect('siswa/list/trash');
Nah sekarang kalo kalian klik button restore all, seharusnya semua data siswa yang telah terhapus akan te restore kembali ke halaman list siswa.. Dan halaman list siswa trash akan menjadi kosong..
Menghapus data secara permanen
Sekarang bagaimana cara nya kalau kita ingin menghapus datanya secara permanen? Cara nya mudah sekali, mari kita demo kan..
Pertama kita hapus lagi beberapa data untuk dijadikan sample, maka data tersebut otomatis akan berpindah ke halaman list siswa trash..
Sekarang pada halaman list siswa trash kita tambahkan sebuah action baru untuk force delete/hapus permanen, jadi kita modifikasi file index_trash.blade.php nya..
../resources/views/siswa/index_trash.blade.php
<!DOCTYPE html> <html> <head> <title>sangcahaya.id</title> <link rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.1/dist/css/bootstrap.min.css"> </head> <body> <div class="container"> <div class="row"> <div class="col-md-12"> <button class="btn btn-lg btn-primary" style="margin-top: 20px;"> <a href="{{ url('siswa/list') }}" style="color: white;">Kembali</a> </button> <button class="btn btn-lg btn-success" style="margin-top: 20px;"> <a href="{{ url('siswa/restore/all') }}" style="color: white;">Restore All</a> </button> <div class="table-responsive"> <table class="table table-hover"> <thead> <tr> <th>Action</th> <th>Nama</th> <th>NISN</th> <th>No HP</th> <th>Email</th> <th>Alamat</th> <th>Created At</th> <th>Updated At</th> </tr> </thead> <tbody> @foreach($data as $dt) <tr> <td> <a href="{{ url('siswa/restore/'.$dt->id) }}">Restore</a> <br><br> <a href="{{ url('siswa/force-delete/'.$dt->id) }}">Force Delete</a> </td> <td>{{$dt->nama}}</td> <td>{{$dt->nisn}}</td> <td>{{$dt->no_hp}}</td> <td>{{$dt->email}}</td> <td>{{$dt->alamat}}</td> <td>{{$dt->created_at}}</td> <td>{{$dt->updated_at}}</td> </tr> @endforeach </tbody> </table> </div> </div> </div> </div> <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min.js" integrity="sha512-894YE6QWD5I59HgZOGReFYm4dnWc1Qt5NtvYSaNcOP+u1T9qYdvdihz0PPSiiqn/+/3e7Jo4EaG7TubfWGUrMQ==" crossorigin="anonymous" referrerpolicy="no-referrer"></script> <script type="text/javascript" src="https://cdn.jsdelivr.net/npm/bootstrap@5.0.1/dist/js/bootstrap.min.js"></script> </body> </html>
Coba kita perhatikan script diatas pada baris ke 42, disana kita menambahkan sebuah action baru dengan nama force delete..
action tersebut mengarah ke url “siswa/force-delete/{id_siswa}”.. oleh karena itu sekarang kita tambahkan url tersebut di file web.php nya..
../routes/web.php
Route::get('siswa/force-delete/{id_siswa}',[SiswaController::class,'force_delete']);
Sekarang kita buka file SiswaController nya dan buat sebuah function baru dengan nama force_delete, dan jugan lupa route tersebut memiliki parameter id_siswa, maka di function nya juga harus membawa parameter id_siswa nya..
../app/Http/Controllers/SiswaController.php
public function force_delete($id_siswa){ $data = Siswa::onlyTrashed()->where('id',$id_siswa); $data->forceDelete(); return redirect('siswa/list/trash'); }
Pada function force delete kita membawa parameter id_siswa, parameter ini akan kita gunakan sebagai patokan data siswa mana yang akan dihapus secara permanen..
Kemudian untuk menghapus datanya secara permanen, kita tinggal gunakan saja perintah forceDelete()..
Setelah semua proses berhasil dijalankan, maka sistem kita arahkan kembali ke halaman list siswa trash..
Sekarang coba kalian klik button action force delete di salah satu baris, maka data tersebut akan terhapus secara permanen..
di halaman list siswa trash data tersebut akan hilang, tapi di halaman list siswa nya data tersebut juga tidak kembali, artinya data tersebut memang sudah benar-benar terhapus dari database..
Menghapus semua data secara permanen sekaligus dalam sekali klik..
Nah sekarang kita akan membuat sebuah button baru lagi di bagian atas halaman list siswa trash untuk menghapus permanen semua data secara sekaligus hanya dengan meng klik button tersebut..
Kita modifikasi file index_trash.blade.php nya..
../resources/views/siswa/index_trash.blade.php
<!DOCTYPE html> <html> <head> <title>sangcahaya.id</title> <link rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.1/dist/css/bootstrap.min.css"> </head> <body> <div class="container"> <div class="row"> <div class="col-md-12"> <button class="btn btn-lg btn-primary" style="margin-top: 20px;"> <a href="{{ url('siswa/list') }}" style="color: white;">Kembali</a> </button> <button class="btn btn-lg btn-success" style="margin-top: 20px;"> <a href="{{ url('siswa/restore/all') }}" style="color: white;">Restore All</a> </button> <button class="btn btn-lg btn-danger" style="margin-top: 20px;"> <a href="{{ url('siswa/force-delete/all') }}" style="color: white;">Force Delete All</a> </button> <div class="table-responsive"> <table class="table table-hover"> <thead> <tr> <th>Action</th> <th>Nama</th> <th>NISN</th> <th>No HP</th> <th>Email</th> <th>Alamat</th> <th>Created At</th> <th>Updated At</th> </tr> </thead> <tbody> @foreach($data as $dt) <tr> <td> <a href="{{ url('siswa/restore/'.$dt->id) }}">Restore</a> <br><br> <a href="{{ url('siswa/force-delete/'.$dt->id) }}">Force Delete</a> </td> <td>{{$dt->nama}}</td> <td>{{$dt->nisn}}</td> <td>{{$dt->no_hp}}</td> <td>{{$dt->email}}</td> <td>{{$dt->alamat}}</td> <td>{{$dt->created_at}}</td> <td>{{$dt->updated_at}}</td> </tr> @endforeach </tbody> </table> </div> </div> </div> </div> <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min.js" integrity="sha512-894YE6QWD5I59HgZOGReFYm4dnWc1Qt5NtvYSaNcOP+u1T9qYdvdihz0PPSiiqn/+/3e7Jo4EaG7TubfWGUrMQ==" crossorigin="anonymous" referrerpolicy="no-referrer"></script> <script type="text/javascript" src="https://cdn.jsdelivr.net/npm/bootstrap@5.0.1/dist/js/bootstrap.min.js"></script> </body> </html>
Pada baris ke 23, kita menambahkan sebuah button baru dengan nama force delete all..
Kalo kita refresh halaman nya akan tampil seperti berikut:
Pada button tersebut kita mengarahkan ke url “siswa/force-delete/all”.. yang mana nanti nya kita juga akan mendaftarkan nya di file web.php..
langsung saja pada file web.php nya kita tambahkan sebuah route baru..
Route::get('siswa/force-delete/all',[SiswaController::class,'force_delete_all']);
Route tersebut menggunakan SiswaController dan mengarah ke function force_delete_all..
Oleh karena itu sekarang didalam file SiswaController nya kita tambahkan lagi sebuah function baru dengan nama force_delete_all..
public function force_delete_all(){ $data = Siswa::onlyTrashed(); $data->forceDelete(); return redirect('siswa/list/trash'); }
Pada function force_delete_all diatas, pertama kita get dulu semua data yang sudah dihapus, kita tampung kedalam variabel data, kemudian variabel data nya kita panggil dan kita hapus permanen semua data nya dengan perintah forceDelete()..
Setelah itu arahkan kembali ke halaman list siswa trash..
Sekarang kalo kalian klik button force delete all, maka seharusnya semua data yang ada dihalaman tersebut akan terhapus semua nya secara permanen..
Rangkuman
Akhir kata, ada beberapa hal yang barusan sudah kita pelajari tentang soft delete pada Laravel..
pertama syarat untuk bisa menggunakan soft delete yaitu pada table database nya, harus terdapat sebuah kolom dengan nama deleted_at dan bersifat nullable..
Kemudian modifikasi file Model nya dengan ketentuan seperti yang sudah kita pelajari diatas..
Maka ketika kita menjalankan hapus data dengan eloquent, data tersebut tidak benar-benar terhapus..
Untuk menampilkan data yang sudah dihapus bisa dengan perintah
Siswa::onlyTrashed()->get();
Untuk merestore dengan bisa gunakan perintah restore()..
Dan untuk menghapus data secara permanen bisa gunakan perintah forceDelete()..
Oh iya satu lagi, soft delete ini hanya akan jalan jika kita menggunakan perintah query eloquent..
Sekian dari saya, semoga bisa bermanfaat buat teman-teman semua, terima kasih..
Support Us
Jika artikel ini bermanfaat untuk kamu, membantu menyelesaikan masalah yang sedang kamu hadapi, kamu juga bisa dukung kami dengan mengunjungi halaman berikut: https://saweria.co/sangcahayaid
Terima kasih..
[…] Untuk mempelajari Soft Delete, kamu bisa buka Postingan berikut: Cara Menggunakan Soft Delete Pada Laravel.. […]
[…] Cara Menggunakan Soft Deletes Pada Laravel […]
[…] Baca Juga : Cara Mudah Menggunakan Soft Deletes pada Laravel.. […]
[…] Silahkan kalian buka: Cara menggunakan Soft Delete pada Laravel.. […]
[…] cara kerja dari global scopes mirip seperti soft deletes pada laravel yang sebelumnya sudah pernah kita […]