参考地址:
- https://learnku.com/docs/laravel/7.x/database/7493#listening-for-query-events
- https://learnku.com/docs/laravel/7.x/eloquent/7499#events-using-closures
应用场景
比如 当你修改数据,前置校验数据动作,这个时候可以使用 模型观察者(或者发送短信邮件通知等)
少量事件
使用闭包
你可以注册在触发各种模型事件时执行的闭包,而不使用自定义事件类。 通常,你应该在模型的 booted
方法中注册这些闭包
class Account extends BaseModel
{
protected static function booted()
{
static::created(function ($user) {
//
});
}
}
大量事件
1. 创建观察者模型
php artisan make:observer AccountObserver --model=Models/Account
2. 监听动作
可以在服务提供器app/Providers/AppServiceProvider.php
中注册你的查询监听器:
class AppServiceProvider extends ServiceProvider
{
// ...
public function boot()
{
Account::observe(AccountObserver::class);
}
}
或者你更想针对model来进行设置
class Account extends BaseModel
{
// ...
protected static function boot()
{
parent::boot();
// 这里添加观察者
static::observe(AccountObserver::class);
}
}