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

Событие forceDeleting

Событие forceDeleting срабатывает перед выполнением операции принудительного удаления модели с использованием метода forceDelete. Оно позволяет выполнить дополнительные проверки, записать логи или полностью отменить удаление. Если обработчик события вернёт false, операция удаления будет прервана. Событие относится к Eloquent-моделям и позволяет контролировать процесс принудительного удаления на уровне модели.

Синтаксис

Для использования события forceDeleting необходимо зарегистрировать обработчик в модели или через наблюдатель. Синтаксис регистрации выглядит следующим образом:

<?php use AppModelsArticle; use IlluminateSupportFacadesLog; Article::forceDeleting(function ($article) { Log::info("Article {$article->id} is being force deleted"); }); ?>

Пример

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

<?php namespace AppModels; use IlluminateDatabaseEloquentModel; use IlluminateSupportFacadesLog; class Article extends Model { protected $fillable = ['title', 'content', 'status']; protected static function booted() { static::forceDeleting(function ($article) { Log::info("Force deleting article with ID: {$article->id}"); Log::info("Article title: {$article->title}"); if ($article->status === 'protected') { Log::warning("Cannot force delete protected article"); return false; } }); } } ?>

Пример

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

<?php namespace AppHttpControllers; use AppModelsArticle; use IlluminateHttpRequest; class ArticleController extends Controller { public function deleteArticle($id) { $article = Article::withTrashed()->find($id); if ($article && $article->trashed()) { $article->forceDelete(); echo "Article with ID $id was force deleted"; } else { echo "Article not found or not soft deleted"; } } } ?>

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

"Article with ID 5 was force deleted"

Пример

Рассмотрим пример, где обработчик события предотвращает принудительное удаление модели с определённым статусом:

<?php namespace AppModels; use IlluminateDatabaseEloquentModel; use IlluminateDatabaseEloquentSoftDeletes; class User extends Model { use SoftDeletes; protected $fillable = ['name', 'email', 'is_admin']; protected static function booted() { static::forceDeleting(function ($user) { if ($user->is_admin) { echo "Cannot force delete admin user"; return false; } }); } } ?>
<?php namespace AppHttpControllers; use AppModelsUser; use IlluminateHttpRequest; class UserController extends Controller { public function forceDeleteUser($id) { $user = User::withTrashed()->find($id); if ($user) { $user->forceDelete(); echo "User was force deleted"; } else { echo "User not found"; } } } ?>

Если попытаться принудительно удалить администратора, результатом будет:

"Cannot force delete admin user"

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

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