Добавление 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
Читать дальше...