Tutorial Laravel #22 : Soft Deletes Laravel


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.

Baca :

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’.

guru.sql

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

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

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

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.

Kemudian buat fungsi/method index() pada controller GuruController.php.

belajar_laravel/app/Http/controllers/GuruController.php

Perhatikan pada controller di atas, kita memanggil model Guru.php, karena kita akan menampilkan data dari table guru.

Selanjutnya seperti biasa, kita ambil data dari table guru dengan fungsi all() dan kita passing ke view guru.blade.php.

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.

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

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.

belajar_laravel/resources/views/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

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,

Pada saat diklik kita alihkan ke route ‘/guru/hapus/{id}’.

Maka sekarang kita buat route tersebut, untuk meng-handle proses penghapusan data.

belajar_laravel/routes/web.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

belajar_laravel/app/Http/controllers/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

Karena kita akan menggunakan fitur SoftDeletes, maka kita harus memanggilnya terlebih dulu pada model.

dan kemudian di dalam class, kita deklarasikan variabel protected $dates.

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

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

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).

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

route ini akan menjalankan method trash() pada controller GuruController.php. buat method trash() pada controller GuruController.php.

belajar_laravel/app/Http/controllers/GuruController.php

Sebenarnya penamaan method nya bebas terserah teman-teman, teman-teman bisa menyesuaikan sendiri sesuai kemauan.

nah, pada method trash() ini kita ambil data guru yang sudah dihapus dengan menggunakan fungsi Guru::onlyTrashed()->get();.

Kemudian tinggal kita passing ke view guru_trash.blade.php.

Buat view guru_trash.blade.php

belajar_laravel/resources/views/guru_trash.blade.php

Sekarang kita lihat hasilnya, klik pada link tong sampah, atau akses url localhost:8000/guru/trash.

Maka akan muncul isi tong sampah, atau data guru-guru yang sudah kita hapus sebelumnya.

membuat tong sampah dengan soft delete eloquent laravel

membuat tong sampah dengan soft delete eloquent laravel

Mantap.

Restore Data Yang Dihapus

Pada view guru_trash.blade.php kita telah membuat sebuah tombol restore.

Yang mengarahkan ke route ‘/guru/kembalikan/id_guru’. jadi sekarang kita buat route tersebut.

belajar_laravel/routes/web.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.

belajar_laravel/app/Http/controllers/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().

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

restore data soft deletes

Maka data guru tersebut akan dikembalikan (ditampilkan kembali).

menampilkan kembali data yang di hapus softdelete

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.

saat link ini diklik, akan dialihkan halaman ke route ‘/guru/kembalikan_semua’. buat route tersebut.

belajar_laravel/routes/web.php

reoute ini menjalankan method kembalikan_semua() pada controller GuruController.php.

belajar_laravel/app/Http/controllers/GuruController.php

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().

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.

tombol ini kita arahkan ke route ‘/guru/hapus_permanen/id guru’. sekarang buat route baru lagi.

belajar_laravel/routes/web.php

route ini akan menjalankan method hapus_permanen() pada controller GuruController.php. sambil mengirimkan data id guru yang akan dihapus secara permanen.

buat method hapus_permanen().

belajar_laravel/app/Http/controllers/GuruController.php

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.

Saat diklik, kita arahkan ke ruote ‘/guru/hapus_permanen_semua’.

Buat routenya.

belajar_laravel/routes/web.php

route ini kita perintah untuk menjalankan method hapus_permanen_semua() dalam controller GuruController.php.

Sekarang kita buat method tersebut dalam controller GuruController.php.

belajar_laravel/app/Http/controllers/GuruController.php

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.

Download Source Code Soft Delete

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.

Tutorial Menarik Lainnya

action url laravel
laravel localization

Diskusi

1 Komentar

Tulis Komentar / Pertanyaan

Download ebook belajar HTML & CSS dasar untuk pemula gratis

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.

DOWNLOAD