PHP
Managing Records with Eloquent Soft Deletes
Learn to implement soft deletes in Laravel Eloquent models, allowing you to 'delete' records by marking them as deleted rather than permanent removal, enabling easy restoration.
// 1. Add 'deleted_at' column to your table (migration):
// $table->softDeletes(); // Adds deleted_at nullable timestamp
// 2. Use SoftDeletes trait in your model:
// use Illuminate\Database\Eloquent\Factories\HasFactory;
// use Illuminate\Database\Eloquent\Model;
// use Illuminate\Database\Eloquent\SoftDeletes;
//
// class Post extends Model
// {
// use HasFactory, SoftDeletes;
// }
// Deleting a record (sets 'deleted_at' timestamp)
$post = App\Models\Post::find(1);
$post->delete();
// Retrieving only non-deleted records (default behavior)
$activePosts = App\Models\Post::all();
// Retrieving all records, including soft deleted
$allPosts = App\Models\Post::withTrashed()->get();
// Retrieving only soft deleted records
$deletedPosts = App\Models\Post::onlyTrashed()->get();
// Restoring a soft deleted record
$post = App\Models\Post::withTrashed()->find(1);
$post->restore();
// Permanently deleting a record
$post = App\Models\Post::withTrashed()->find(1);
$post->forceDelete();
How it works: Soft Deletes provide a convenient way to "delete" models without actually removing them from your database. Instead, a `deleted_at` timestamp is set on the record. Eloquent queries will automatically exclude soft-deleted models. This feature is invaluable for data recovery, maintaining audit trails, or temporary removal, and allows for easy restoration or permanent deletion when needed.