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

Событие updating

Событие updating относится к модели Eloquent и вызывается в момент обновления существующей записи, непосредственно перед сохранением изменений в базу данных. Это событие позволяет выполнить пользовательский код, например, для валидации данных, логирования изменений или модификации атрибутов перед сохранением. Событие получает экземпляр модели в качестве аргумента, что позволяет обращаться к его свойствам и методам. Важно отметить, что событие updating срабатывает только при вызове методов update и save для существующей модели, и не вызывается при создании новой записи. Если вернуть false из обработчика события, процесс сохранения будет прерван.

Синтаксис

<?php // В методе boot модели Model::updating(function ($model) { // код до сохранения }); ?>
<?php // В сервис-провайдере use AppModelsArticle; Article::updating(function ($article) { // код до сохранения }); ?>
<?php // В Observer class ArticleObserver { public function updating(Article $article) { // код до сохранения } } ?>

Параметры:

  • $model или конкретный класс модели - экземпляр обновляемой модели.

Пример регистрации в модели

Давайте зарегистрируем событие updating в методе boot модели Article:

<?php namespace AppModels; use IlluminateDatabaseEloquentModel; class Article extends Model { protected static function boot() { parent::boot(); static::updating(function ($article) { $article->updated_at = now(); echo "Article is being updated"; }); } } ?>

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

<?php use AppModelsArticle; $article = Article::find(1); $article->title = 'new title'; $article->save(); ?>

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

"Article is being updated"

Обратите внимание, что событие сработало до сохранения изменений в базу данных.

Пример использования Observer

Давайте создадим Observer для модели User и зарегистрируем событие updating:

<?php namespace AppObservers; use AppModelsUser; class UserObserver { public function updating(User $user) { if ($user->email != $user->getOriginal('email')) { echo "Email has been changed to: " . $user->email; } } } ?>
<?php namespace AppModels; use IlluminateDatabaseEloquentModel; use AppObserversUserObserver; class User extends Model { public static function boot() { parent::boot(); static::observe(UserObserver::class); } } ?>

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

<?php use AppModelsUser; $user = User::find(1); $user->email = 'new@example.com'; $user->save(); ?>

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

"Email has been changed to: new@example.com"

Событие updating позволяет отследить, какие именно поля были изменены, используя метод getOriginal.

Пример прерывания операции

Давайте запретим обновление записи, если заголовок статьи слишком короткий:

<?php namespace AppModels; use IlluminateDatabaseEloquentModel; class Article extends Model { protected static function boot() { parent::boot(); static::updating(function ($article) { if (strlen($article->title) < 3) { return false; } }); } } ?>

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

<?php use AppModelsArticle; $article = Article::find(1); $article->title = 'ab'; $res = $article->save(); echo $res; ?>

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

false

При возврате false из обработчика события обновление не происходит, и метод save возвращает false.

Пример изменения данных перед сохранением

Давайте автоматически приводим заголовок статьи к верхнему регистру перед сохранением:

<?php namespace AppModels; use IlluminateDatabaseEloquentModel; class Article extends Model { protected static function boot() { parent::boot(); static::updating(function ($article) { $article->title = strtoupper($article->title); }); } } ?>

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

<?php use AppModelsArticle; $article = Article::find(1); $article->title = 'hello world'; $article->save(); echo $article->title; ?>

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

"HELLO WORLD"

Событие updating позволяет модифицировать атрибуты модели непосредственно перед сохранением в базу данных.

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

  • событие updated,
    которое срабатывает после сохранения модели
  • событие saving,
    которое срабатывает до сохранения модели (создания или обновления)
  • метод save,
    который сохраняет модель в базу данных
  • метод update,
    который обновляет модель в базе данных
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить