Laravel: как создать функцию после или перед сохранением | обновлением

Мне нужно создать функцию для вызова после или до сохранения () или обновления (), но я не знаю, как это сделать. Я думаю, что мне нужен обратный вызов от save() update(), но я не знаю, как это сделать. Спасибо

2 ответа

Внутри вашей модели вы можете добавить метод boot(), который позволит вам управлять этими событиями.

Например, имея модель User.php:

class User extends Model 
{

    public static function boot()
    {
        parent::boot();

        self::creating(function($model){
            // ... code here
        });

        self::created(function($model){
            // ... code here
        });

        self::updating(function($model){
            // ... code here
        });

        self::updated(function($model){
            // ... code here
        });

        self::deleting(function($model){
            // ... code here
        });

        self::deleted(function($model){
            // ... code here
        });
    }

}

Вы можете просмотреть все доступные события здесь: https://laravel.com/docs/5.2/eloquent

Это работает только после того, как на вашей модели произошло событие.

Создайте наблюдателя для своей модели

php artisan make:observer UserObserver --model=User

это создаст наблюдатель событий на вашей модели

class UserObserver
{
    /**
     * Handle the User "created" event.
     *
     * @param  \App\Models\User  $user
     * @return void
     */
    public function created(User $user)
    {
        //
    }

    /**
     * Handle the User "updated" event.
     *
     * @param  \App\Models\User  $user
     * @return void
     */
    public function updated(User $user)
    {
        //
    }

    /**
     * Handle the User "deleted" event.
     *
     * @param  \App\Models\User  $user
     * @return void
     */
    public function deleted(User $user)
    {
        //
    }

    /**
     * Handle the User "forceDeleted" event.
     *
     * @param  \App\Models\User  $user
     * @return void
     */
    public function forceDeleted(User $user)
    {
        //
    }
}

Вы должны зарегистрировать этого наблюдателя в методе загрузки на одном из ваших ServiceProvider, предпочтительно AppServiceProvider.

public function boot()
{
    User::observe(UserObserver::class);
}

Создайте провайдера с помощью этой команды

php artisan make:provider ProviderClassName

затем определить обратные вызовы для моделей в функции загрузки

Model::created(function($model){
  //Do you want to do
});

Список доступных обратных вызовов:

Model::creating(function($model){});
Model::updated(function($model){});
Model::updating(function($model){});
Model::deleted(function($model){});
Model::deleting(function($model){});
Model::saving(function($model){});
Model::saved(function($model){});
Другие вопросы по тегам