有时候我们需要在一个表更改后,触发某个事件,最常见的比如,首页推荐商品 1 更改了,需要清空所有首页商品缓存。
首先我们需要在建立一个观察者类,比如 App\Model\Observers\ProjectAttrObservers
,当然放在什么地方或者叫什么名都可以自己定义。
里面的代码可能是
<?php
namespace App\Models\Observers; class GoodsObservers { public function saved(\App\Models\Goods $model) { \Cache::forget('topGoodsList'); } }
作用就是,当 goods
表新增和修改的时候,saved
这个方法就会触发,然后清空缓存
之后在 AppServiceProvider
,当然你也可以新建一个比如 ObserverServiceProvider
。
<?php
namespace App\Providers; use App\Models\Goods; use Illuminate\Support\ServiceProvider; class ObserverServiceProvider extends ServiceProvider { /** * Bootstrap any application services. * * @return void */ public function boot() { Goods::observe(new \App\Models\Observers\GoodsObservers()); } /** * Register any application services. * * @return void */ public function register() { // } }
这个的作用是在程序启动的时候,监听 GoodsObservers
这个类 最后,将 ObserverServiceProvider
放到 config/app.php
的providers
数组中即可
本功能仅在 laravel 程序内可用,如果别的程序修改了 goods 表,这个模型观察者不会触发的。