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 方法注册观察者。目录是在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();
最近访问时间:2025-01-18 14:43:28