Hard Delete vs Soft Delete
Hard delete menghapus data secara permanen dari database. Soft delete menandai data sebagai "terhapus" tanpa benar-benar menghapusnya.
Implementasi Soft Delete
-- Tambahkan kolom deleted_at
ALTER TABLE posts ADD COLUMN deleted_at TIMESTAMP NULL;
-- "Hapus" data (soft delete)
UPDATE posts SET deleted_at = NOW() WHERE id = 1;
-- Query hanya data aktif (belum dihapus)
SELECT * FROM posts WHERE deleted_at IS NULL;
-- Termasuk data yang "terhapus"
SELECT * FROM posts; -- semua data
-- Restore data yang soft-deleted
UPDATE posts SET deleted_at = NULL WHERE id = 1;
Laravel Soft Deletes
// Model
use Illuminate\Database\Eloquent\SoftDeletes;
class Post extends Model
{
use SoftDeletes;
}
// Usage
$post->delete(); // soft delete
$post->restore(); // restore
$post->forceDelete(); // hard delete
Post::withTrashed()->get(); // termasuk yang dihapus
Post::onlyTrashed()->get(); // hanya yang dihapus
Archiving Pattern
Untuk data lama yang jarang diakses, gunakan archiving — pindahkan ke tabel terpisah.
-- Tabel utama (data aktif)
CREATE TABLE orders (...);
-- Tabel arsip (data lama)
CREATE TABLE orders_archive (LIKE orders INCLUDING ALL);
-- Arsipkan data lebih dari 1 tahun
INSERT INTO orders_archive
SELECT * FROM orders WHERE created_at < NOW() - INTERVAL '1 year';
DELETE FROM orders WHERE created_at < NOW() - INTERVAL '1 year';
Kapan Soft Delete vs Hard Delete?
- Soft delete — data yang mungkin perlu di-restore, audit trail, regulasi compliance
- Hard delete — data sementara, data yang harus dihapus (GDPR), menghemat storage