Событие restored
Событие restored относится к модели Eloquent и вызывается после того, как модель была успешно восстановлена методом restore. Для использования этого события модель должна применять трейт SoftDeletes. Событие позволяет выполнить дополнительные операции, например, обновить связанные данные, отправить уведомления или очистить кеш. Событие restored автоматически вызывается при восстановлении модели.
Синтаксис
<?php
use AppModelsArticle;
Article::restored(function ($article) {
// Actions after restore
});
?>
Событие можно зарегистрировать в методе booted модели или в сервис-провайдере.
Пример
Зарегистрируем событие restored в модели Article, которое будет обновлять поле 'restored_at' при восстановлении:
<?php
namespace AppModels;
use IlluminateDatabaseEloquentModel;
use IlluminateDatabaseEloquentSoftDeletes;
class Article extends Model
{
use SoftDeletes;
protected $fillable = [
'title',
'content',
'deleted_at',
'restored_at'
];
protected static function booted()
{
static::restored(function ($article) {
$article->restored_at = now();
$article->save();
});
}
}
?>
Пример
Используем событие restored для отправки уведомления администратору о восстановлении статьи:
<?php
namespace AppModels;
use IlluminateDatabaseEloquentModel;
use IlluminateDatabaseEloquentSoftDeletes;
use AppNotificationsArticleRestored;
class Article extends Model
{
use SoftDeletes;
protected $fillable = [
'title',
'content',
'deleted_at'
];
protected static function booted()
{
static::restored(function ($article) {
$article->notify(new ArticleRestored($article));
});
}
}
?>
Пример
Зарегистрируем событие в сервис-провайдере для очистки кеша после восстановления записи:
<?php
namespace AppProviders;
use IlluminateFoundationSupportProvidersEventServiceProvider;
use AppModelsArticle;
class EventServiceProvider extends EventServiceProvider
{
public function boot()
{
Article::restored(function ($article) {
cache()->forget('article_' . $article->id);
cache()->forget('articles_list');
});
}
}
?>
Пример
Пример использования события в контроллере при восстановлении нескольких моделей:
<?php
namespace AppHttpControllers;
use AppModelsArticle;
use IlluminateHttpRequest;
use IlluminateHttpJsonResponse;
class ArticleController extends Controller
{
public function restore(Request $request, $id): JsonResponse
{
$article = Article::onlyTrashed()->findOrFail($id);
$article->restore();
return response()->json([
'message' => 'Article restored successfully',
'article' => $article
]);
}
}
?>