
Pendahuluan
Bayangin lagi ngerjain fitur sederhana, tapi tiba-tiba client atau bos minta data yang udah dihapus balik lagi gara-gara kepencet. Kebanyakan dari kita pasti panik kalau database cuma punya perintah DELETE, karena data itu hilang permanen. Untungnya, Laravel punya fitur Soft Deletes yang bikin kita bisa 'nyembunyiin' data tanpa harus benar-benar menghapusnya dari disk.
Tips & Best Practices
Di banyak project, biasanya saya mulai dengan memastikan kolom deleted_at sudah ada di tabel migrasi. Jangan pernah lupa pakai $table->softDeletes() saat bikin tabel, biar kita nggak perlu nambahin kolom manual yang malah rawan typo.
Sering banget saya lihat orang buru-buru, padahal penting banget untuk selalu ngecek relasi antar tabel sebelum melakukan soft delete. Kalau kita hapus parent tapi child-nya masih nempel, nanti bakal muncul error Integrity Constraint Violation yang bikin aplikasi crash di production.
Pas lagi bikin dashboard admin, saya lebih suka misahin antara data aktif dan data sampah di query. Pakai onlyTrashed() secara eksplisit itu ngebantu banget biar kita tahu pasti data mana yang memang harusnya dibuang dan mana yang cuma mau kita restore.
Contoh Kode
Untuk pakai fitur ini, tinggal masuk ke model kalian dan panggil trait-nya:
use Illuminate\Database\Eloquent\SoftDeletes;
class Post extends Model {
use SoftDeletes;
}Nanti waktu kalian panggil $post->delete(), Laravel otomatis ngisi kolom deleted_at tanpa ngilangin record-nya. Kalau mau balikin lagi, cukup pakai $post->restore().
Variasi Implementasi
Kadang kita punya kebutuhan khusus, misalnya mau hapus data secara permanen (hard delete) untuk data sensitif. Kita bisa pakai $post->forceDelete() untuk bener-bener ngebersihin row dari database. Pilihannya tergantung kebutuhan: kalau untuk data user atau transaksi, biasanya saya lebih milih soft delete biar ada audit trail yang rapi, tapi buat log yang nggak penting, hard delete jauh lebih ngirit storage.
Kesalahan Umum
1. Lupa nambahin trait SoftDeletes di model, hasilnya query delete jadi permanen padahal udah capek-capek nambahin kolom deleted_at.
2. Mengabaikan relasi foreign key, jadi pas data dihapus, aplikasi malah lempar error database karena constraint-nya belum diatur ke onDelete('cascade') atau set null.
3. Terlalu sering pakai withTrashed() di semua query, yang ujung-ujungnya bikin performa aplikasi lemot karena database harus nge-scan data sampah juga.
4. Lupa nge-filter data trashed di API response, alhasil user bisa ngelihat record yang harusnya udah nggak tampil.
5. Asumsi kalau SoftDeletes bakal ngurusin segala hal secara otomatis tanpa butuh migrasi kolom, padahal database perlu tahu kalau ada kolom baru yang dimonitor.
Ringkasan
Soft deletes itu penyelamat buat developer yang sering dapet request 'balikin data dong'. Intinya, jangan anggap fitur ini cuma buat iseng, tapi sebagai layer pengaman tambahan. Pas project udah gede, nanti bakal kerasa sendiri manfaatnya pas ada data penting yang nggak sengaja terhapus dan kita bisa balikin dalam hitungan detik.
Komentar
Posting Komentar