Laravel:如何创建函数保存|更新之后或之前

Dan*_*heu 30 save updates laravel

我需要在save()或update()之后或之前生成一个函数来调用,但我不知道该怎么做.我想我需要来自save()update()的回调,但我不知道该怎么办.谢谢

Mau*_*sas 80

在模型中,您可以添加一个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
        });
    }

}
Run Code Online (Sandbox Code Playgroud)

您可以在此处查看所有可用事件:https://laravel.com/docs/5.2/eloquent#events

  • 请注意:“通过Eloquent发布批量更新时,不会为已更新的模型触发已保存和已更新的模型事件。这是因为发布批量更新时实际上从未检索到模型。” https://laravel.com/docs/5.8/eloquent#events (3认同)
  • 一个快速有用的附加说明@MauroCasas:您最好使用引导方法而不是引导。该方法代表这种特定情况,并在 boot() 之后立即调用。这样做,你不需要调用parent::boot() (2认同)

Roh*_*tri 10

使用此命令创建提供程序

php artisan make:provider ProviderClassName
Run Code Online (Sandbox Code Playgroud)

然后在启动函数中定义模型的回调

Model::created(function($model){
  //Do you want to do
});
Run Code Online (Sandbox Code Playgroud)

可用回调列表:

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){});
Run Code Online (Sandbox Code Playgroud)

  • 还有 saving() 和 saving() (2认同)

Ebo*_*ker 9

这仅在您的模型上发生事件后才有效。

为您的模型创建一个观察者

php artisan make:observer UserObserver --model=User
Run Code Online (Sandbox Code Playgroud)

这将在您的模型上创建一个事件观察者

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)
    {
        //
    }
}
Run Code Online (Sandbox Code Playgroud)

您必须在您的 ServiceProvider 之一的 boot 方法中注册此观察者,最好是 AppServiceProvider

public function boot()
{
    User::observe(UserObserver::class);
}
Run Code Online (Sandbox Code Playgroud)