Soft delete records by setting deleted_at instead of removing rows — restore or forceDelete later.
Soft Deletes
// Migration
$table->softDeletes(); // adds deleted_at column
// Model
class Post extends Model {
use SoftDeletes;
}
// Normal delete — sets deleted_at, not actually deleted
$post->delete();
// Queries — soft deleted excluded by default
Post::all(); // excludes soft deleted
// Include soft deleted
Post::withTrashed()->get();
Post::onlyTrashed()->get();
// Restore
$post->restore();
Post::onlyTrashed()->where("user_id", 1)->restore();
// Permanently delete
$post->forceDelete();
// Check
$post->trashed(); // true if soft deleted