laravel学习笔记–模型事件

在使用模型的时候,会触发模型事件,
其中允许挂接到模型生命周期的如下节点:

  • retrieved 从数据库中查找数据时触发
  • creating
  • created
  • updating
  • updated
  • saving
  • saved
  • deleting
  • deleted
  • restoring
  • restored

例如,我在Blog模型中去使用模型事件

/**
     * 模型的 "booted" 方法
     *
     * @return void
     */
    protected static function booted()
    {
        /**
         * 模型删除事件
         */
        static::deleted(function ($blog) {
            info('删除了博客:' . $blog->title);
        });
    }

然后,在控制器中使用模型去删除数据

Blog::destroy(12);

这样就会就会触发模型事件

观察者

定义观察者

如果在一个模型上监听了多个事件,可以使用观察者来将这些监听器组织到一个单独的类中。观察者类的方法名映射到你希望监听的 Eloquent
事件。 这些方法都以模型作为其唯一参数

生成新的观察者类,如果是第一次创建,会在app目录创建一个新目录observer

php artisan make:observer BlogObserver --model=Blog

当然,只是生成了还不能使用,还要去注册这个服务才可以使用

在服务提供者的 boot 方法注册观察者。目录是在appProvidersAppServiceProvider.php
下面是在 AppServiceProvider 中注册观察者的示例

 public function boot()
    {
       //注册观察者
        Blog::observe(BlogObserver::class);
    }

好了,定义完和注册完就可以去使用观察者了
例如,我在观察者中去使用模型删除触发的事件

public function deleted(Blog $blog)
    {
        info('使用观察者删除了博客:' . $blog->title);
    }

然后在控制器中去使用模型删除数据

Blog::destroy(18);

然后就会触发删除事件了

禁用事件

可能偶尔希望暂时「禁用」模型触发的所有事件。 可以使用withoutEvents方法来实现。 withoutEvents方法接受闭包作为唯一的参数在此闭包中执行的任何代码都不会触发模型事件

以下代码将获取并删除一个 AppModelsUser 实例,而不会触发任何模型事件。 给定闭包返回的任何值都将通过
withoutEvents 方法返回

use AppModelsUser;

$user = User::withoutEvents(function () use () {
    User::findOrFail(1)->delete();

    return User::find(2);
});

保存单个模型并禁用事件
可能希望「保存」给定的模型而不会触发任何事件。 您可以使用saveQuietly 方法完成此操作

$user = User::findOrFail(1);

$user->name = 'Victoria Faith';

$user->saveQuietly();

版权声明:
作者:linrux
链接:https://www.tot7.cn/technology/php/162.html
来源:阿信博客
文章版权归作者所有,未经允许请勿转载。

THE END
分享
二维码
< <上一篇
下一篇>>