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.