Laravel: how to create a function After or Before save|update

后端 未结 3 484
悲哀的现实
悲哀的现实 2020-12-07 16:34

I need to generate a function to call after or before save() or update() but i don\'t know how to do. I think I need a callback from save() update() but I don\'t know how to

相关标签:
3条回答
  • 2020-12-07 16:59

    Inside your model, you can add a boot() method which will allow you to manage these events.

    For example, having User.php model:

    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
            });
        }
    
    }
    

    You can review all available events over here: https://laravel.com/docs/5.2/eloquent#events

    0 讨论(0)
  • 2020-12-07 17:02

    Create a provider by using this command

    php artisan make:provider ProviderClassName
    

    then define the callbacks for models in boot function

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

    List of available callbacks:

    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){});
    
    0 讨论(0)
  • 2020-12-07 17:05

    This only works after an event happened on your model.

    Create an observer for your model

    php artisan make:observer UserObserver --model=User
    

    this will create an event observer on your model

    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)
        {
            //
        }
    }
    

    You must register this observer in the boot method on one of your ServiceProviders preferably the AppServiceProvider

    public function boot()
    {
        User::observe(UserObserver::class);
    }
    
    0 讨论(0)
提交回复
热议问题