JUNIOR-BLOG

Для всех кто увлекается программированием

Главная

Добавление Soft Deletes в Laravel 12

1. Создание миграции для добавления столбца deleted_at


Создайте новую миграцию командой:

php artisan make:migration add_soft_deletes_to_table_table

 

2. Редактирование миграции

Откройте созданный файл миграции и добавьте столбец deleted_at:

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

return new class extends Migration
{
    public function up()
    {
        Schema::table('posts', function (Blueprint $table) {
            $table->softDeletes(); // Добавляет столбец deleted_at
        });
    }

    public function down()
    {
        Schema::table('posts', function (Blueprint $table) {
            $table->dropSoftDeletes(); // Удаляет столбец при откате
        });
    }
};

 

3. Добавление трейта SoftDeletes в модель

В соответствующей модели добавьте трейт SoftDeletes:

use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;

class Post extends Model
{
    use SoftDeletes;
}

 

4. Запуск миграции

Выполните миграцию:

 

php artisan migrate

5. Использование Soft Deletes

Теперь вы можете использовать мягкое удаление:

// Мягкое удаление
$post = Post::find(1);
$post->delete(); // Установит текущее время в deleted_at

// Восстановление
Post::withTrashed()->find(1)->restore();

// Полное удаление из БД
Post::withTrashed()->find(1)->forceDelete();

// Получение только удаленных записей
$deletedPosts = Post::onlyTrashed()->get();

// Получение всех записей (включая удаленные)
$allPosts = Post::withTrashed()->get();

 

Дополнительные возможности

Если вы хотите использовать другое имя столбца вместо deleted_at:

// В миграции
$table->softDeletes('deleted_time');

// В модели
const DELETED_AT = 'deleted_time';

Для кастомной логики при восстановлении:

 

class Post extends Model
{
    use SoftDeletes;

    public static function boot()
    {
        parent::boot();

        static::restored(function ($post) {
            // Логика после восстановления
        });
    }
}

При создании новых моделей с soft delete можно использовать:

php artisan make:model Post -m --softdelete

Для корректной работы индексов рекомендуется добавить индекс на этот столбец:

$table->softDeletes()->index();

Похожие статьи

Что такое Carbon?

В дополнение к статье о манипуляции датами в PHP поговорим о том какповысить комфорт работы с помощью библиотеки Carbon

Читать дальше...

Добавляем доменное имя для сайта размещенного на VPS

Это вторая часть по теме как разместить сайт разработанный с использование Laravel и Sail на VPS. В этой части мы сделаем сайт доступным по доменному имени, для чего познакомимся с NGINX и поработаем с его конфигурацией.

Читать дальше...

Деплой Laravel Sail приложения на VPS

Цель этого туториала — разместить приложение, разработанное на Laravel 11, на VPS. Проект создан с использованием Docker и Laravel Sail

Читать дальше...

Комментарии