laravel之模型事件

直接上代码
App\Observers

<?php
namespace App\Observers;

class TestObserver {

    public function creating() {
        dump("create - 1 action");
    }

    public function updated() {
        dump("update + 1 action");
    }
}

App\Providers\EventServiceProvider.php 注册

/**
     * Register any events for your application.
     * 记得引入模型
     * @return void
     */
    public function boot()
    {
        parent::boot();

        //
        TestModel::observe(TestObserver::class);
    }

控制器测试

public function test(){
        $data = [
            'title' => 'test',
            'displayorder' => 3,
            'type' => 'testtest'
        ];
        TestModel::create($data);
        dump("create action");
    }
image.png
public function test(){
        $data = [
            'title' => 'test',
            'displayorder' => 4,
            'type' => 'testtest'
        ];
        TestModel::where('id', 3)->first()->update($data);
        dump("update action");
    }
image.png

模型钩子方法

retrieved,            #获取到模型实例后触发
creating,             #创建过程前                                * 常用
created,              #创建成功后                                * 常用
updating,             #更新过程前                                * 常用
updated,              #更新成功后                                * 常用
saving,               #代表这两个方法的集合creating,updating       * 常用
saved,                #代表这两个方法的集合created,updated         * 常用
deleting,             #删除过程前                                * 常用
deleted,              #删除过程后                                * 常用
restoring,            #恢复软删除记录前触发
restored,             #恢复软删除记录后触发

当模型已存在,非新建时,事件触发顺序如下:
saving -> updating -> updated -> saved
当模型不存在,即需要新增时,事件触发顺序如下:
saving -> creating -> created -> saved

一个save()方法执行成功的话,会影响updated 和 saved,并且是先触发updated事件再触发saved事件,所以实际使用观察者的时候二选一即可,千万别两个事件重复交叉了。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容