Laravel Tutorials

Permanent Record Deletion with Laravel's forceDestroy

Published Updated
Permanent Record Deletion with Laravel's forceDestroy image

Laravel's soft deletes feature helps maintain data integrity by keeping deleted records in your database. However, there are times when you need to permanently remove these records. The new forceDestroy method simplifies this process, eliminating the need to first retrieve the model before permanent deletion.

This method is particularly useful when performing cleanup operations, managing user data for privacy compliance, or implementing moderation systems where certain records need to be completely removed from the database.

use App\Models\Post;
// Single record permanent deletion
Post::forceDestroy($id);
// Multiple records
Post::forceDestroy([$id1, $id2, $id3]);

Let's explore a practical example of a data cleanup service:

<?php
 
namespace App\Services;
 
use App\Models\User;
use App\Models\Content;
use Illuminate\Support\Facades\Log;
use App\Events\UserDataPurged;
 
class DataCleanupService
{
public function purgeInactiveUserData(int $monthsInactive = 12)
{
$inactiveUsers = User::onlyTrashed()
->where('deleted_at', '<=', now()->subMonths($monthsInactive))
->pluck('id');
 
if ($inactiveUsers->isEmpty()) {
return ['message' => 'No inactive users to purge'];
}
 
// Cleanup related content first
$contentCount = Content::onlyTrashed()
->whereIn('user_id', $inactiveUsers)
->count();
 
Content::whereIn('user_id', $inactiveUsers)
->forceDestroy();
// Permanently remove user accounts
$userCount = User::forceDestroy($inactiveUsers);
Log::info('Completed user data purge', [
'users_removed' => $userCount,
'content_removed' => $contentCount
]);
UserDataPurged::dispatch($inactiveUsers);
 
return [
'users_purged' => $userCount,
'content_purged' => $contentCount,
'message' => "Successfully purged {$userCount} inactive user accounts"
];
}
}

The forceDestroy method streamlines permanent deletion operations, making your code cleaner and more efficient when managing soft-deleted records.

Harris Raftopoulos photo

Senior Software Engineer • Staff & Educator @ Laravel News • Co-organizer @ Laravel Greece Meetup

Sponsored

laravelcloud logo
Laravel Cloud

Easily create and manage your servers and deploy your Laravel applications in seconds.

Visit Laravel Cloud

The latest

View all →
Look What You Helped Me Build image

Look What You Helped Me Build

Read article
BashBox: A Sandboxed Bash Interpreter for AI Agents in PHP image

BashBox: A Sandboxed Bash Interpreter for AI Agents in PHP

Read article
Running Laravel's Scheduler on Multiple Servers image

Running Laravel's Scheduler on Multiple Servers

Read article
Laravel Fake Assertions Now Accept Property Arrays image

Laravel Fake Assertions Now Accept Property Arrays

Read article
Route::query() and Model defaults() in Laravel 13.35 image

Route::query() and Model defaults() in Laravel 13.35

Read article
Laravel AI SDK 1.1 Adds Agent Skills and Cohere Chat image

Laravel AI SDK 1.1 Adds Agent Skills and Cohere Chat

Read article