Метод observe
Метод observe позволяет назначить класс-наблюдатель для модели Eloquent. Наблюдатель содержит методы, соответствующие событиям модели: creating, created, updating, updated, saving, saved, deleting, deleted, retrieved, restoring, restored, replicating, forceDeleting и forceDeleted. Первым параметром передаётся имя класса наблюдателя. Метод вызывается статически на модели и регистрирует наблюдателя для всех событий модели.
Синтаксис
<?php
Model::observe(ObserverClass::class);
?>
Пример
Давайте создадим наблюдатель для модели Article и зарегистрируем его:
<?php
namespace AppModels;
use IlluminateDatabaseEloquentModel;
class Article extends Model
{
protected $fillable = ['title', 'content', 'status'];
}
?>
<?php
namespace AppObservers;
use AppModelsArticle;
class ArticleObserver
{
public function creating(Article $article): void
{
$article->status = 'draft';
}
public function created(Article $article): void
{
// Логирование создания статьи
}
}
?>
<?php
namespace AppProviders;
use AppModelsArticle;
use AppObserversArticleObserver;
use IlluminateSupportServiceProvider;
class AppServiceProvider extends ServiceProvider
{
public function boot(): void
{
Article::observe(ArticleObserver::class);
}
}
?>
Теперь при создании новой статьи автоматически будет устанавливаться статус 'draft':
<?php
use AppModelsArticle;
$article = Article::create([
'title' => 'New article',
'content' => 'Content text'
]);
echo $article->status;
?>
Результат выполнения кода:
"draft"
Пример
Давайте используем несколько событий в одном наблюдателе для отслеживания изменений:
<?php
namespace AppObservers;
use AppModelsArticle;
class ArticleObserver
{
public function retrieved(Article $article): void
{
// Действие при получении модели
}
public function updating(Article $article): void
{
// Проверка перед обновлением
$article->updated_at = now();
}
public function deleted(Article $article): void
{
// Действие после удаления
}
}
?>
<?php
use AppModelsArticle;
use AppObserversArticleObserver;
Article::observe(ArticleObserver::class);
$article = Article::find(1);
$article->title = 'Updated title';
$article->save();
echo $article->updated_at;
?>
Результат выполнения кода:
"2026-09-08 12:30:45"
Смотрите также
-
метод
save,
который сохраняет модель в базу данных -
метод
update,
который обновляет модель -
метод
delete,
который удаляет модель -
метод
withoutEvents,
который отключает события модели