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

Событие forceDeleted

Событие forceDeleted возникает в момент, когда модель Eloquent была окончательно удалена из базы данных с помощью метода forceDelete. Это событие не срабатывает при обычном удалении, если модель использует трейт SoftDeletes. Оно позволяет выполнить дополнительные действия после того, как запись была полностью стёрта из базы данных, без возможности восстановления. Событие передаёт удалённую модель в качестве аргумента обработчику или слушателю.

Синтаксис

<?php Model::forceDeleted(function ($model) { // Действия после принудительного удаления }); ?>

Пример

Давайте зарегистрируем обработчик события forceDeleted в модели Article:

<?php namespace App\Models; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\SoftDeletes; class Article extends Model { use SoftDeletes; protected $fillable = ['title', 'content', 'user_id']; protected static function booted() { static::forceDeleted(function ($article) { \Log::info('Article force deleted: ' . $article->id); }); } } ?>

Теперь при принудительном удалении статьи в лог будет записано сообщение с идентификатором удалённой записи.

Пример

Давайте создадим слушатель события forceDeleted для очистки связанных данных:

<?php namespace App\Providers; use Illuminate\Support\ServiceProvider; use App\Models\Article; use App\Listeners\ClearArticleCache; class EventServiceProvider extends ServiceProvider { protected $listen = [ 'eloquent.forceDeleted: App\Models\Article' => [ ClearArticleCache::class, ], ]; } ?>

Пример

Давайте определим слушатель, который выполняет очистку кэша после принудительного удаления модели:

<?php namespace App\Listeners; use App\Models\Article; use Illuminate\Support\Facades\Cache; class ClearArticleCache { public function handle(Article $article) { Cache::forget('articles_list'); Cache::forget('article_' . $article->id); \Log::info('Cache cleared for article: ' . $article->id); } } ?>

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

"Cache cleared for article: 1"

Пример

Давайте используем анонимный обработчик события forceDeleted в контроллере для выполнения дополнительных действий:

<?php namespace App\Http\Controllers; use App\Models\Article; use Illuminate\Http\Request; use Illuminate\Support\Facades\DB; class ArticleController extends Controller { public function forceDelete($id) { $article = Article::withTrashed()->find($id); if ($article) { Article::forceDeleted(function ($model) use ($article) { DB::table('article_logs')->insert([ 'article_id' => $article->id, 'action' => 'force_deleted', 'created_at' => now(), ]); }); $article->forceDelete(); return response()->json(['message' => 'Article permanently deleted']); } return response()->json(['message' => 'Article not found'], 404); } } ?>

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

{"message":"Article permanently deleted"}

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

  • событие forceDeleting,
    которое вызывается перед принудительным удалением
  • событие deleted,
    которое вызывается после обычного удаления
  • метод forceDelete,
    который выполняет принудительное удаление модели
  • метод delete,
    который выполняет обычное удаление модели
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить