РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
88 of 1392 menu

Поле softDeletes

Метод softDeletes применяется в миграциях для добавления поля deleted_at, которое хранит дату и время удаления записи. Это позволяет не удалять записи физически из базы данных, а помечать их как удалённые. При использовании трейта SoftDeletes в модели Eloquent, все запросы автоматически исключают мягко удалённые записи.

Синтаксис

<?php Schema::table('table_name', function (Blueprint $table) { $table->softDeletes(); }); ?>

Метод не принимает параметров и добавляет колонку deleted_at типа timestamp, которая может быть NULL.

Пример использования в миграции

<?php use Illuminate\Database\Migrations\Migration; use Illuminate\Database\Schema\Blueprint; use Illuminate\Support\Facades\Schema; return new class extends Migration { public function up(): void { Schema::create('articles', function (Blueprint $table) { $table->id(); $table->string('title'); $table->text('content'); $table->boolean('active')->default(true); $table->timestamps(); $table->softDeletes(); }); } public function down(): void { Schema::dropIfExists('articles'); } }; ?>

Пример модели с SoftDeletes

<?php namespace App\Models; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\SoftDeletes; class Article extends Model { use SoftDeletes; protected $fillable = ['title', 'content', 'active']; } ?>

Пример удаления записи

При вызове метода delete у модели с трейтом SoftDeletes запись не удаляется физически, а в поле deleted_at сохраняется текущая дата и время:

<?php use App\Models\Article; $article = Article::find(1); $article->delete(); $deleted = Article::whereNotNull('deleted_at')->first(); echo $deleted->title; ?>

Результат выполнения кода:

"article 1"

Пример получения всех записей вместе с удалёнными

Метод withTrashed позволяет включить мягко удалённые записи в результаты запроса:

<?php use App\Models\Article; $articles = Article::withTrashed()->get(); foreach ($articles as $article) { echo $article->title . ' - ' . ($article->trashed() ? 'deleted' : 'active'); } ?>

Результат выполнения кода:

"article 1 - deleted" "article 2 - active" "article 3 - active"

Пример получения только удалённых записей

Метод onlyTrashed возвращает только мягко удалённые записи:

<?php use App\Models\Article; $trashed = Article::onlyTrashed()->get(); foreach ($trashed as $article) { echo $article->title; } ?>

Результат выполнения кода:

"article 1"

Пример восстановления удалённой записи

Метод restore удаляет метку времени из поля deleted_at, восстанавливая запись:

<?php use App\Models\Article; $article = Article::withTrashed()->where('id', 1)->first(); $article->restore(); $res = Article::all(); foreach ($res as $article) { echo $article->title; } ?>

Результат выполнения кода:

"article 1" "article 2" "article 3"

Пример принудительного удаления

Метод forceDelete полностью удаляет запись из базы данных, независимо от наличия мягкого удаления:

<?php use App\Models\Article; $article = Article::find(2); $article->forceDelete(); $res = Article::all(); foreach ($res as $article) { echo $article->title; } ?>

Результат выполнения кода:

"article 1" "article 3"

Смотрите также

  • трейт SoftDeletes,
    который добавляет методы для работы с мягким удалением
  • метод withTrashed,
    который включает удалённые записи в запрос
  • метод onlyTrashed,
    который возвращает только удалённые записи
  • метод restore,
    который восстанавливает мягко удалённую запись
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить