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

Событие deleted

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

Регистрация события

Событие можно зарегистрировать в методе booted модели или через сервис-провайдер:

<?php namespace AppModels; use IlluminateDatabaseEloquentModel; use IlluminateDatabaseEloquentFactoriesHasFactory; class Article extends Model { use HasFactory; protected static function booted() { static::deleted(function ($model) { // Действия после удаления Log::info("Article deleted: " . $model->id); }); } } ?>

Пример

Давайте зарегистрируем событие для модели Article, которое будет удалять связанные комментарии после удаления статьи:

<?php namespace AppModels; use IlluminateDatabaseEloquentModel; use IlluminateDatabaseEloquentFactoriesHasFactory; class Article extends Model { use HasFactory; public function comments() { return $this->hasMany(Comment::class); } protected static function booted() { static::deleted(function ($article) { $article->comments()->delete(); }); } } ?>

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

<?php namespace AppHttpControllers; use AppModelsArticle; use IlluminateHttpRequest; class ArticleController extends Controller { public function destroy($id) { $article = Article::find($id); $article->delete(); return response()->json(['message' => 'Article deleted']); } } ?>

Пример

Давайте создадим лог-запись после удаления модели с использованием события deleted:

<?php namespace AppModels; use IlluminateDatabaseEloquentModel; use IlluminateSupportFacadesLog; use IlluminateDatabaseEloquentFactoriesHasFactory; class Article extends Model { use HasFactory; protected static function booted() { static::deleted(function ($article) { Log::info("Article deleted", [ 'id' => $article->id, 'title' => $article->title, 'deleted_at' => now() ]); }); } } ?>

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

"[2024-01-15 10:30:00] local.INFO: Article deleted {"id":5,"title":"My Article","deleted_at":"2024-01-15 10:30:00"}"

Пример

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

<?php namespace AppProviders; use IlluminateSupportServiceProvider; use AppModelsArticle; use AppModelsUser; class EventServiceProvider extends ServiceProvider { public function boot() { Article::deleted(function ($article) { // Действия после удаления статьи cache()->forget("article_{$article->id}"); }); User::deleted(function ($user) { // Действия после удаления пользователя $user->posts()->delete(); cache()->forget("user_{$user->id}"); }); } } ?>

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

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