Функція м'якого видалення в Laravel допомагає зберігати цілісність даних, залишаючи видалені записи в базі даних. Проте, іноді потрібно назавжди видалити ці записи. Новий метод forceDestroy спрощує цю процедуру, усуваючи необхідність спочатку отримувати модель перед постійним видаленням.
Цей метод особливо корисний під час виконання операцій очищення, управлінні даними користувачів для дотримання конфіденційності або впровадження систем модерації, де певні записи потрібно повністю видалити з бази даних.
use App\Models\Post;
// Видалення одного запису назавжди
Post::forceDestroy($id);
// Видалення кількох записів
Post::forceDestroy([$id1, $id2, $id3]);
Розгляньмо практичний приклад служби очищення даних:
<?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' => 'Немає неактивних користувачів для видалення'];
}
// Спочатку очищаємо пов’язані записи
$contentCount = Content::onlyTrashed()
->whereIn('user_id', $inactiveUsers)
->count();
Content::whereIn('user_id', $inactiveUsers)
->forceDestroy();
// Постійно видаляємо акаунти користувачів
$userCount = User::forceDestroy($inactiveUsers);
Log::info('Завершено видалення даних користувачів', [
'users_removed' => $userCount,
'content_removed' => $contentCount
]);
UserDataPurged::dispatch($inactiveUsers);
return [
'users_purged' => $userCount,
'content_purged' => $contentCount,
'message' => "Успішно видалено {$userCount} неактивних акаунтів користувачів"
];
}
}
Метод forceDestroy спрощує операції постійного видалення, роблячи ваш код більш чистим і ефективним при управлінні записами з м'яким видаленням