Soft Deletes Laravel – Pada tutorial sebelumnya, saya sudah pernah menyinggung bahwa kelebihan Eloquent belum selesai sampai yang kita pelajari sebelumnya.
Masih ada banyak sekali kelebihan Eloquent yang bisa membantu kita dalam mempercepat dan mempermudah pembuatan aplikasi atau website menggunakan Laravel.
Salah satu fitur kerennya lagi adalah ada nya fitur Soft Delete pada laravel.
Soft Deletes Laravel
Apa itu Soft Delete ? dan bagaimana cara membuat atau menggunakan Soft Delete di Laravel? Berikut penjelasan dan contohnya.
Pengertian Soft Deletes Laravel
Soft Deletes adalah fitur dari laravel untuk membuat penghapusan data sementara. kita bisa menghapus data pada table, tapi data tersebut tidak benar-benar langsung dihapus, masih tersimpan dalam table tapi tidak tampil lagi.
Saya analogikan, dengan fitur soft deletes ini, ibaratnya kita bisa memasukkan data ke tong sampah. seperti recycle bin misalnya jika di OS windows. nah, data yang sudah kita masukkan ke tong sampah tersebut bisa kita tampilkan kembali atau bisa juga kita hapus secara permanen.
Misal nya lagi, ibaratnya ada beberapa barang di atas meja teman-teman. teman-teman bisa membuang barang-barang tersebut ke tong sampah yang ada di dekat meja, nah pasti teman-teman masih bisa mengambil barang yang sudah dibuang tadi, dan diletakkan kembali ke atas meja. Atau mungkin teman-teman juga bisa membuang barang tersebut untuk selamanya dengan cara membakar barang tersebut.
Jika teman-teman pernah menggunakan CMS WordPress, saat teman-teman menghapus postingan artikel, maka data postingan tersebut tidak langsung dihapus, tapi akan masuk ke menu trash (sampah). kita masih bisa menampilkan kembali (restore) postingan yang sudah dihapus tersebut. dan kita juga bisa menghapus postingan tersebut secara permanen.
Nah, di laravel, kita tidak perlu susah-susah untuk membuat fitur semacam ini pada aplikasi kita. laravel sudah menyediakan fitur SoftDeletes yang bisa langsung kita gunakan.
Cara Menggunakan Soft Deletes
Untuk mulai belajar tentang Soft Deletes, pastikan teman-teman sudah memiliki sebuah database dan table yang akan kita olah. Di sini saya sudah membuat sebuah table dengan nama ‘guru‘ sebagai contoh, di dalam database ‘belajar_laravel‘.
Persiapan
silahkan teman-teman buat dulu table guru, dan isi beberapa data percobaan. teman-teman bisa menggunakan migration dan menginput data dummy dengan Seeding & Faker seperti yang sudah kita pelajari pada tutorial sebelumnya.
Jika teman-teman ingin membuat table guru nya secara manual juga bisa, yang kita butuhkan adalah kolum id, nama, umur, created_at, updated_at dan deleted_at.
Atau jika teman-teman ingin cepat, teman-teman bisa mengimport sql berikut ke database ‘belajar_laravel’.
MODIFY`id`int(10)UNSIGNED NOT NULL AUTO_INCREMENT,AUTO_INCREMENT=11;
Pokoknya intinya kita membutuhkan sebuah kolum tambahan dengan nama “deleted_at“.
Karena kita wajib memiliki kolum deleted_at untuk menggunakan fitur Soft Deleting.
soft deletes laravel
Jika teman-teman belum punya kolum deleted_at, bisa teman-teman buat secara manual dengan menambahkan kolum baru di table guru melalui phpmyadmin.
Oke sampai di sini saya anggap teman-teman sudah punya database belajar_laravel, dan sudah punya table guru seperti pada gambar di atas.
Koneksi Database
Silahkan teman-teman konfigurasi dulu databasenya pada file .env.
.env
1
2
3
4
5
6
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=belajar_laravel
DB_USERNAME=root
DB_PASSWORD=root
Menampilkan Data
Untuk menampilkan data dengan Eloquent Laravel sudah kita pelajari pada tutorial laravel sebelumnya.
Buat route untuk menampilkan data guru.
belajar_laravel/routes/web.php
1
Route::get('/guru','GuruController@index');
Route ‘/guru’ yang kita buat di atas, akan menjalankan method index() yang ada dalam controller GuruController.
Karena kita belum punya controller GuruController.php, maka sekarang kita buat dulu controller GuruController.php menggunakan php artisan seperti biasa.
Masuk ke direktori project laravel melalui terminal atau CMD. dan buat controller dengan php artisan.
1
php artisan make:controller GuruController
Kemudian buat fungsi/method index() pada controller GuruController.php.
Perhatikan pada controller di atas, kita memanggil model Guru.php, karena kita akan menampilkan data dari table guru.
1
use App\Guru;
Selanjutnya seperti biasa, kita ambil data dari table guru dengan fungsi all() dan kita passing ke view guru.blade.php.
1
2
3
4
5
6
// menampilkan data guru
public function index()
{
$guru=Guru::All();
return view('guru',['guru'=>$guru]);
}
karena kita belum mempunyai model Guru.php dan view guru.blade.php, maka akan kita buat kedua file tersebut.
Buat model dengan nama Guru.php.
1
php artisan make:model Guru
Pada model Guru.php, kita deklarasikan dulu bahwa kita akan menggunakan table dengan nama ‘guru‘, bukan ‘gurus’ (plural model eloquent).
belajar_laravel/app/Guru.php
1
2
3
4
5
6
7
8
9
10
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
classGuruextendsModel
{
protected$table="guru";
}
Oke, selanjutnya karena tadi pada controller data gurunya kita passing ke view guru.blade.php, maka kita buat sebuah file view baru dengan nama guru.blade.php.
Oke, kita lihat hasilnya dulu, baru kemudian kita terapkan soft deleting eloquent laravel.
Jalankan project
php artisan serve
dan akses
localhost:8000/guru
maka hasilnya seperti berikut.
soft deleting laravel
Data guru sudah berhasil tampil. seperti yang teman-teman lihat pada view guru, di sana kita membuat tombol hapus untuk menghapus sementara data guru dan akan dimasukkan ke folder atau tong sampah ibaratnya.
Kemudian kita juga membuat menu tong sampah pada bagian atas, saat menu tong sampah di klik, maka akan di alihkan ke halaman yang menampilkan data-data guru yang di hapus sementara. pada halaman tong sampah itu nanti akan kita buat juga tombol untuk menghapus data guru secara permanen atau mengembalikan (restore) dan menampilkan kembali data yang sudah dihapus tersebut.
Membuat Soft Deletes Untuk Menghapus Sementara
Perhatikan pada tombol hapus yang kita buat pada view guru.blade.php,
route ini akan menghandle proses penghapusan, kita arahkan ke method hapus() dalam controller GuruController.php, sambil mengirimkan id guru yang akan dihapus.
buat method hapus() pada controller GuruController.php
Proses penghapusan data pada method hapus() di atas masih sama seperti yang sudah kita pelajari sebelumnya.
Belum selesai sampai di sini, karena kita di sini akan menggunakan Fitur Soft Delete, maka perlu beberapa pengaturan pada model Guru.php.
Buka file model Guru.php, dan sesuaikan seperti berikut.
belajar_laravel/app/Guru.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;
classGuruextendsModel
{
use SoftDeletes;
protected$table="guru";
protected$dates=['deleted_at'];
}
Karena kita akan menggunakan fitur SoftDeletes, maka kita harus memanggilnya terlebih dulu pada model.
1
use Illuminate\Database\Eloquent\SoftDeletes;
dan kemudian di dalam class, kita deklarasikan variabel protected $dates.
1
protected$dates=['deleted_at'];
Oke selesai teman-teman. Sekarang kita coba klik tombol hapus pada data guru. disini saya mencontohkan dengan menghapus data guru yang bernama “cemeti gunarto”.
menghapus data dengan soft deletes
Setelah klik hapus maka data guru tersebut akan hilang dan tidak terlihat lagi. tapi pada database data tersebut masih ada.
soft deleting pada eloquent laravel
Data guru yang sudah kita hapus tadi tidak terlihat lagi, tapi pada database masih ada. pada kolum deleted_at record data yang dihapus tadi terisi dengan waktu kapan data tersebut dihapus.
Sampai disini kita telah berhasil membuat penghapusan data sementara. dimana data yang kita hapus tadi ibaratnya seperti kita masukkan ke tong sampah.
Menampilkan Data yang Dihapus (Isi tong sampah)
Pada halaman view guru.blade.php yang kita buat sebelumnya, kita telah membuat menu tong sampah. pada menu ini nantinya akan menampilkan halaman yang menampilkan data-data yang sudah dihapus (tong sampah).
1
<ahref="/guru/trash">Tong Sampah</a>
Pada saat menu/link Tong sampah diklik, maka akan dialihkan ke route ‘/guru/trash’.
Sekarang buat route baru, yaitu route ‘/guru/trash’.
belajar_laravel/routes/web.php
1
Route::get('/guru/trash','GuruController@trash');
route ini akan menjalankan method trash() pada controller GuruController.php. buat method trash() pada controller GuruController.php.
Sama seperti proses penghapusan data, di sini kita mengirimkan data id guru ke controller. pada route ini kita kirimkan id guru ke method kembalikan() dalam controller GuruController.php.
Buat method kembalikan() dalam controller GuruController.php.
pada method ini, kita menangkap id guru yang ingin dikembalikan dalam parameter method kembalikan().
Kemudian kita seleksi terlebih dulu data guru yang ada pada tong sampah dan yang id nya sesuai dengan id guru yang ingin direstore. kemudian kita kembalikan/restore dengan fungsi restore().
1
2
$guru=Guru::onlyTrashed()->where('id',$id);
$guru->restore();
kemudian kita alihkan halaman kembali ke route ‘/guru/trash’.
kita coba, klik tombol restore pada data guru yang ingin di kembalikan.
restore data soft deletes
Maka data guru tersebut akan dikembalikan (ditampilkan kembali).
menampilkan kembali data yang di hapus softdelete
Restore Semua Data Yang Sudah Dihapus Sekaligus
Sip. sampai di sini aplikasi crud guru dengan fitur soft delete ini sudah bagus. tapi supaya lebih senpurna akan kita buatkan juga fitur untuk merestore semua data guru yang ada di tong sampah. karena pasti pengguna akan kesulitan jika harus merestore satu per satu data guru dari tong sampah.
Pada view guru_trash.blade.php kita sudah membuat link/menu untuk merestore atau mengembalikan semua data yang ada di tong sampah.
Perhatikan pada method tersebut. pertama kita ambil semua data yang ada di tong sampah dan kita simpan dalam variabel $guru, kemudian kita kembalikan semua data tersebut dengan fungsi restore().
1
2
$guru=Guru::onlyTrashed();
$guru->restore();
dan terakhir tinggal kita alihkan halaman kembali ke route ‘/guru/trash’.
Sekarang coba klik hapus pada beberapa data guru. kemudian masuk ke menu tong sampah. dan klik pada link kembalikan semua.
Maka semua data yang ada di tong sampah akan di restore atau kembali ditampilkan.
Hapus Permanen Data Yang Dihapus
Untuk menghapus secara permanen, perhatikan pada tombol hapus permanen pada view guru_trash.blade.php.
route ini akan menjalankan method hapus_permanen() pada controller GuruController.php. sambil mengirimkan data id guru yang akan dihapus secara permanen.
pada method hapus_permanen() ini, kita tangkap data yang dikirim dari route, kemudian kita seleksi data gurunya berdasarkan id dan yang ada di tong sampah tentunya. sama seperti saat kita membuat restore. hanya saja pada proses hapus permanen ini kita gunakan fungsi forceDelete() untuk menghapus data tersebut secara permanan.
Sehinga data benar-benar di hapus dan menghilang dari table guru.
Menghapus Permanen Semua Data Yang Sudah Dihapus Sekaligus
Untuk menghapus semua data yang ada di tong sampah secara permanen, sama caranya seperti membuat fungsi restore untuk semua data guru.
bedanya pada proses hapus permanen kita gunakan fungsi forceDelete.
Perhatikan link Hapus Permanen Semua pada view guru_trash.blade.php.
// hapus permanen semua data guru yang sudah dihapus
$guru=Guru::onlyTrashed();
$guru->forceDelete();
return redirect('/guru/trash');
}
Pada method hapus_permanen_semua() ini, kita ambil semua data guru yang ada di tong sampah, kemudian kita hapus permanen dengan fungsi forceDelete(). dan terakhir kita alihkan halaman ke route ‘/guru/trash’.
Oke, selesai sudah teman-teman materi laravel tentang Soft Delete Laravel.
Silahkan teman-teman download full source code soft delete eloquent laravel pada link berikut.
Terima kasih, sampah jumpa pada tutorial Laravel selanjutnya.
Diki Alfarabi Hadi
Coding enthusiast.
Someone who love learn something new. especially about web programming and web design. happy to share about knowledge and learn from other.
Action URL Laravel – Action URL adalah sebuah fitur pada laravel untuk tujuan generate URL ke controller, dan juga bisa mengirimkan data parameter seperti pada ...
Multi Bahasa Localization Laravel – Multi bahasa merupakan fitur pada website untuk menampilkan informasi dalam berbagai bahasa. Laravel telah menyediakan fitur multi bahasa. sehingga untuk ...
Import Excel Laravel – Setelah sebelumnya kita belajar tentang membuat export atau cetak laporan excel pada laravel, seperti ada yang kurang jika kita tidak membahas ...
Export Excel Laravel – Fitur export atau cetak laporan excel merupakan salah satu fitur yang paling penting. bagi teman-teman yang sering membuat aplikasi pesanan dari ...
Download Ebook belajar HTML & CSS dasar untuk pemula gratis.
Ebook ini bisa di download oleh teman-teman yang baru mulai belajar HTML dan CSS dasar tapi tidak tahu mau memulai belajar dari mana.
materi pembelajaran sudah di susun secara sistematis dan di dukung contoh gambar.
artikel yang sangat bermanfaat