监听 Laravel Model 生命周期中的 create delete 事件

发布时间: 2019-06-06 19:34:08 作者: 大象笔记

现实场景

一个论坛系统,当后台管理人员进行删帖,需要对用户的发帖量进行重新计算。

所以,需要能监听 Model 的删除事件。

三种实现方法。后面两种为官方推荐的方法,然而我更喜欢第一种。。。

方法一

app/Providers/AppServiceProvider.php

public function boot()
{
    Post::deleted(function($post){
        $user_id = $post->user_id;
        $post_count = Post::where([
            ['user_id', $user_id],
            ['status', 1],
        ])->count();
        $user = User::find($user_id);
        $user->post_count = $post_count;
        $user->save();
    });
}

方法二:标准的 Event 事件处理

新建一个帖子删除对应的事件

php artisan make:event PostDeleted

运行命令之后,会发现多了一个文件

new file:   app/Events/PostDeleted.php

这个也好麻烦,还需要实现一个 listener 。。。

Model 中再通过 events map 来指定对应逻辑。

方法三:Model 的 Observers

参考:

https://laravel.com/docs/5.5/eloquent#observers

Observers 需要在 AppServiceProvider 中注册,所以当你没看过 AppServiceProvider ,单纯看 Model 的定义时,根本无法感知到这个 Model 还有一个对应的 Observers 。

而,标准的 Event 事件处理则可以通过 events map 来清楚的看到每个 model 事件对应的处理操作。

我是一名山东烟台的开发者,联系作者