有時候我們需要在一個表更改后,觸發某個事件,最常見的比如,首頁推薦商品 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 表,這個模型觀察者不會觸發的。