Урок 04

Soft Deletes

Что это

Soft Deletes позволяют «удалять» записи, не удаляя их физически. Вместо этого в колонку deleted_at записывается текущая дата. Запись остаётся в БД, но Eloquent исключает её из обычных запросов.

Это полезно, когда данные могут понадобиться позже: история заказов, восстановление удалённых пользователей, аудит.

Настройка

Добавь трейт в модель:

use Illuminate\Database\Eloquent\SoftDeletes;

class Post extends Model
{
    use SoftDeletes;
}

Добавь колонку в миграцию:

$table->softDeletes();

Использование

Обычное удаление теперь проставляет deleted_at:

$post->delete();

Запись исчезает из запросов:

Post::all(); // удалённые не попадут

Восстановление

$post->restore();

Или через запрос:

Post::withTrashed()->where('id', 1)->restore();

Полное удаление

$post->forceDelete();

Просмотр удалённых

Post::withTrashed()->get();
Post::onlyTrashed()->get();

Проверка

if ($post->trashed()) {
    // удалён
}

Связи и Soft Deletes

Удалённые записи не попадают в связи. Если нужно их включить:

$user->posts()->withTrashed()->get();