Soft Deletes
AuditChain auto-detects when a model uses Laravel's SoftDeletes trait and captures additional events accordingly. No configuration required.
Auto-Detection
When your model uses SoftDeletes, AuditChain automatically registers listeners for restored and forceDeleted events alongside the standard created, updated, and deleted events:
use Illuminate\Database\Eloquent\SoftDeletes; use GrayMatter\AuditChain\Concerns\HasAuditTrail; use GrayMatter\AuditChain\Contracts\Auditable; class Document extends Model implements Auditable { use HasAuditTrail, SoftDeletes; }
Captured Events
| Action | Event | old_values | new_values |
|---|---|---|---|
$doc->delete() |
deleted |
Model attributes | -- |
$doc->restore() |
restored |
-- | Model attributes |
$doc->forceDelete() |
forceDeleted |
Model attributes | -- |
Soft deletes record deleted — the same event name as a regular delete. The difference is that the model still exists in the database. The restored and forceDeleted events only fire on models with SoftDeletes.
Full Lifecycle Example
$document = Document::create(['title' => 'Report Q4']); // audit log: event=created $document->update(['title' => 'Report Q4 (Final)']); // audit log: event=updated $document->delete(); // audit log: event=deleted (soft delete) $document->restore(); // audit log: event=restored $document->forceDelete(); // audit log: event=forceDeleted (permanent)
Works with Both Modes
SoftDeletes detection works identically with HasActivityLog (light mode) and HasAuditTrail (full mode). In full mode, all soft delete events are included in the cryptographic hash chain.