观察者Observer模型事件,使用注意情况

观察者Observer模型事件使用

了解一下观察者有那些事件?怎么使用

想在一个模型中监听多个事件,可以把它写成一个类,类中的方法名称即是你想要监听的事件名称

class ArticleObserver
{

 /**
 * 监听数据即将创建的事件。
 *
 * @param  Article $article
 * @return void
 */
 public function creating(Article $article) 
 {
 }

 /**
 * 监听数据创建后的事件。
 *
 * @param  Article $article
 * @return void
 */
 public function created(Article $article) 
 {
 }

 /**
 * 监听数据即将更新的事件。
 *
 * @param  Article $article
 * @return void
 */ 
 public function updating(Article $article) 
 {
 }

 /**
 * 监听数据更新后的事件。
 *
 * @param  Article $article
 * @return void
 */
 public function updated(Article $article) 
 {
 }

 /**
 * 监听数据即将保存的事件。
 *
 * @param  Article $article
 * @return void
 */
 public function saving(Article $article) 
 {
 }

 /**
 * 监听数据保存后的事件。
 *
 * @param  Article $article
 * @return void
 */
 public function saved(Article $article) 
 {
 }

 /**
 * 监听数据即将删除的事件。
 *
 * @param  Article $article
 * @return void
 */
 public function deleting(Article $article)
 {
 }

 /**
 * 监听数据删除后的事件。
 *
 * @param  Article $article
 * @return void
 */
 public function deleted(Article $article)
 {
 }

 /**
 * 监听数据即将从软删除状态恢复的事件。
 *
 * @param  Article $article
 * @return void
 */
 public function restoring(Article $article) 
 {
 }

 /**
 * 监听数据从软删除状态恢复后的事件。
 *
 * @param  Article $article
 * @return void
 */
 public function restored(Article $article) 
 {
 }
 }

实际业务使用场景

删除文章业务

不生效做法

/**
 * 删除方案
 * @param $ids
 * @return mixed
 */
 public function delete($ids)
 {
     return Scheme::query()->whereIn('id', $ids)->get()->delete();
 }

生效做法

  • 第一种
    /**
    * 删除文章
    * @param $ids
    * @return mixed
    */
    public function delete($ids)
    { 
       return Article::query()->whereIn('id', $ids)->get()->each->delete();
    }
  • 第二种
    /**
    * 删除文章
    * @param $ids
    * @return mixed
    */
    public function delete($ids)
    {
    $articles = Article::query()->whereIn('id', $ids)->get();
       foreach ($articles as $article){
           $article->delete();
       }
    }

创建观察者文件

namespace App\Observers;

use App\MicroServices\Scheme\Models\Article;
use App\MicroServices\Article\Services\TagService;

class ArticleObserver
{
 /** * 监听文章删除后需要处理业务,减少标签引用
 * @param Article $scheme
 */ public function deleted(Article $article)
 { //减标签引用数量
 $tagService = app(TagService::class); $tagService->decreaseCount($article->tag_id,1);
 }}

注册观察者

需要在App\Providers\AppServiceProvider.php文件注册观察者

 /**
 * Bootstrap any application services. * * @return void */ public function boot()
 { Article::observe(ArticleObserver::class);
 }

有帮助到你记得点赞,收藏👍👍👍

本作品采用《CC 协议》,转载必须注明作者和本文链接
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!