
Pendahuluan
Bayangin lagi ngerjain fitur CRUD standar, tapi tiba-tiba klien minta data yang udah dihapus pengen bisa dibalikin lagi. Biasanya panik karena udah kadung pakai delete() biasa, akhirnya data musnah tanpa jejak. Untungnya di Laravel, kita punya fitur Soft Deletes yang bikin hidup lebih tenang karena data nggak beneran hilang, cuma 'disembunyiin' dari query.
Tips & Best Practices
- Di banyak project, saya selalu mastiin kolom deleted_at udah ada di migration sebelum nge-run fitur apa pun agar nggak ada error 'Column not found' saat query berjalan.
- Pas lagi nanganin relasi yang kompleks, saya lebih suka pakai withTrashed() daripada maksa join manual supaya logika relasi tetap bersih dan gampang dibaca sama rekan tim lain.
- Saat ngerjain fitur restore, saya selalu nambahin pengecekan apakah data beneran ada atau udah permanen hilang supaya user nggak dapet error aneh saat proses pemulihan.
Contoh Kode
Ini cara saya biasanya pasang di model biar nggak ribet:
use Illuminate\Database\Eloquent\SoftDeletes;
class Post extends Model {
use SoftDeletes;
protected $dates = ['deleted_at'];
}Kalau butuh akses data yang udah 'terhapus', biasanya saya tulis gini pas di controller:
$posts = Post::withTrashed()->where('user_id', $id)->get();Variasi Implementasi
Ada dua pendekatan yang sering saya bandingin. Pertama, pakai SoftDeletes bawaan yang udah otomatis, ini favorit saya karena minim konfigurasi. Kedua, bikin custom trait sendiri kalau kita punya kebutuhan unik, misalnya ingin nyimpen siapa yang menghapus data (deleted_by) atau alesan penghapusannya. Keduanya punya tradeoff: bawaan Laravel lebih cepet diimplementasi, sedangkan custom trait lebih fleksibel buat sistem audit log yang ketat.
Kesalahan Umum
- Lupa nambahin trait SoftDeletes di model tapi udah nekat manggil method restore().
- Nggak nge-update table migration, sering banget kejadian lupa nambahin nullable kolom deleted_at.
- Pakai forceDelete() tanpa sadar pas lagi buru-buru, ujung-ujungnya data ilang permanen padahal rencananya cuma mau non-aktifin aja.
- Kebingungan pas query pakai join manual, karena default-nya join di Laravel nggak otomatis nyaring deleted_at.
- Nggak nge-handle query global scope yang bikin data 'terhapus' ikutan muncul di laporan dashboard.
Ringkasan
Soft Deletes itu penyelamat saat ada 'accident' di sistem. Intinya, manfaatin fitur ini bukan buat nyimpen sampah, tapi buat ngasih jaring pengaman ke user. Pas udah paham cara kerja dibalik layarnya, kita jadi lebih pede pas ngerjain fitur hapus-menghapus tanpa harus takut dimaki klien pas datanya mendadak ilang.
Komentar
Posting Komentar