laravel学习笔记--模型事件

66 篇文章 4 订阅

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

  • 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 方法注册观察者。目录是在app\Providers\AppServiceProvider.php
下面是在 AppServiceProvider 中注册观察者的示例

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

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

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

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

Blog::destroy(18);

然后就会触发删除事件了
在这里插入图片描述

禁用事件

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

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

use App\Models\User;

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

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

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

$user = User::findOrFail(1);

$user->name = 'Victoria Faith';

$user->saveQuietly();
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小信啊啊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值