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

Событие restoring

Событие restoring является событием Eloquent, которое срабатывает непосредственно перед тем, как модель будет восстановлена из состояния мягкого удаления. Это событие позволяет выполнить дополнительные действия или проверки до того, как модель будет восстановлена. Событие принимает экземпляр модели в качестве единственного параметра и работает в паре с событием restored, которое вызывается после успешного восстановления. Если в обработчике события вернуть false, процесс восстановления будет прерван.

Синтаксис

<?php Model::restoring(function ($model) { // логика перед восстановлением }); ?>

Метод применяется к модели и принимает замыкание или имя класса слушателя. Первым параметром передаётся экземпляр модели.

Пример

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

<?php namespace AppModels; use IlluminateDatabaseEloquentModel; use IlluminateDatabaseEloquentSoftDeletes; class Article extends Model { use SoftDeletes; protected static function booted() { static::restoring(function ($article) { Log::info("Article restoring: " . $article->id); }); } } ?>

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

<?php namespace AppHttpControllers; use AppModelsArticle; class ArticleController extends Controller { public function restore($id) { $article = Article::onlyTrashed()->find($id); $res = $article->restore(); echo $res; } } ?>

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

true

При этом в логах будет запись о восстановлении.

Пример

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

<?php namespace AppModels; use IlluminateDatabaseEloquentModel; use IlluminateDatabaseEloquentSoftDeletes; class Article extends Model { use SoftDeletes; protected static function booted() { static::restoring(function ($article) { $article->status = 'pending'; if ($article->title === '') { return false; } }); } } ?>

Попробуем восстановить статью с пустым заголовком:

<?php namespace AppHttpControllers; use AppModelsArticle; class ArticleController extends Controller { public function restore($id) { $article = Article::onlyTrashed()->find($id); $res = $article->restore(); echo $res; } } ?>

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

false

Восстановление не произойдёт, так как обработчик вернул false.

Пример

Давайте зарегистрируем несколько слушателей для события restoring с помощью метода observe:

<?php namespace AppObservers; use AppModelsArticle; class ArticleObserver { public function restoring(Article $article) { $article->restored_at = now(); } public function restored(Article $article) { $article->update(['status' => 'published']); } } ?>
<?php namespace AppModels; use IlluminateDatabaseEloquentModel; use IlluminateDatabaseEloquentSoftDeletes; use AppObserversArticleObserver; class Article extends Model { use SoftDeletes; protected static function booted() { static::observe(ArticleObserver::class); } } ?>

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

<?php namespace AppHttpControllers; use AppModelsArticle; class ArticleController extends Controller { public function restore($id) { $article = Article::onlyTrashed()->find($id); $article->restore(); $res = $article->toArray(); echo $res; } } ?>

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

{"id":1,"title":"article","status":"published","restored_at":"2024-01-15 10:30:00","deleted_at":null}

Перед восстановлением поле restored_at заполняется текущей датой, а после восстановления статус модели меняется на published.

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

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