Безповоротне видалення записів з використанням forceDestroy у Laravel

0
Перекладено ШІ
Оригінал: Laravel News
Оновлено: 21 січня, 2025
Вам коли-небудь потрібно було назавжди видалити записи з вашої бази даних у Laravel? Ознайомтеся з новим методом forceDestroy, який спрощує цю задачу, дозволяючи зберігати порядок у вашому коді та легко управляти м'яко видаленими даними

Функція м'якого видалення в 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 спрощує операції постійного видалення, роблячи ваш код більш чистим і ефективним при управлінні записами з м'яким видаленням

Популярні

Logomark Logotype

"SQLSTATE[HY000] [2002] Connection refused" у Laravel в GitHub Actions

Чи стикалися ви з помилкою «SQLSTATE[HY000] [2002] Connection refused» під час налаштування GitHub Actions для вашого додатку на Laravel? У нашій статті ми розглянемо три поширені причини цієї помилки та надамо рішення для їх усунення. Читайте далі, щоб дізнатися, як ваш CI/CD потік може працювати бездоганно!

Logomark Logotype

Що нового в PHP 8.5

PHP 8.5 обіцяє безліч нових можливостей, таких як оператор Pipe, функції `array_first()` та `array_last()`, а також нове розширення URI. Чи готові ви дізнатися, як ці функції можуть спростити вашу розробку? Читайте далі, щоб дізнатися більше про ці захоплюючі нововведення

Logomark Logotype

Створення CLI-додатка за допомогою Laravel та Docker

Зазирніть у світ Laravel, де потужний CLI-фреймворк відкриває нові можливості для розробки командного інтерфейсу. Дізнайтеся, як створити просту утиліту для перевірки акцій, яка працює з Docker, та які переваги це може принести у вашому проєкті!