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();