Освоение мягкого удаления в Laravel: попрощайтесь с постоянной потерей данных

В Laravel управление удаленными записями упрощается благодаря концепции обратимого удаления. Мягкое удаление позволяет помечать записи как удаленные, не удаляя их из базы данных. Эта функция особенно полезна, если вы хотите сохранить данные для целей аудита или предоставить возможность восстановления удаленных элементов. В этой статье мы рассмотрим различные методы реализации обратимого удаления в Laravel с помощью миграции базы данных и попутно предоставим примеры кода.

  1. Добавление столбца обратимого удаления в таблицу.
    Чтобы включить обратимое удаление для конкретной таблицы, начните с добавления столбца deleted_at, допускающего значение NULL, в файл миграции таблицы. В этом столбце будет храниться временная метка удаления при обратимом удалении записи. Вот пример добавления столбца обратимого удаления в таблицу users:
Schema::table('users', function (Blueprint $table) {
    $table->softDeletes();
});
  1. Включение обратимого удаления в модели.
    После добавления столбца deleted_atв таблицу необходимо включить функцию обратимого удаления в соответствующей модели Eloquent. Для этого используйте признак SoftDeletes, который предоставляет необходимые методы для мягкого удаления и восстановления записей. Например, рассмотрим модель User:
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;
class User extends Model
{
    use SoftDeletes;
    // ...
}
  1. Мягкое удаление записей.
    Чтобы мягко удалить запись, просто вызовите метод delete()в экземпляре модели. В столбце deleted_atбудет установлена ​​текущая временная метка:
$user = User::find(1);
$user->delete();
  1. Восстановление обратимо удаленных записей.
    Обратно удаленные записи можно восстановить с помощью метода restore()в экземпляре модели:
$user = User::withTrashed()->find(1);
$user->restore();
  1. Получение обратимо удаленных записей:
    Чтобы получить обратимо удаленные записи, используйте метод withTrashed()в экземпляре построителя запросов модели:
$softDeletedUsers = User::withTrashed()->whereNotNull('deleted_at')->get();
  1. Безвозвратное удаление записей:
    Если вы хотите навсегда удалить обратимо удаленную запись, вы можете использовать метод forceDelete():
$user = User::withTrashed()->find(1);
$user->forceDelete();

Мягкое удаление в Laravel предоставляет удобный способ обработки удаленных записей без их окончательного удаления из базы данных. В этой статье мы рассмотрели процесс реализации мягкого удаления с помощью миграции базы данных и продемонстрировали, как выполнять мягкое удаление, восстановление, извлечение и окончательное удаление записей. Используя функцию обратимого удаления Laravel, вы можете обеспечить целостность данных и вести полный контрольный журнал вашего приложения.