资讯专栏INFORMATION COLUMN

laravel 模型事件几种用法

KavenFan / 1052人阅读

摘要:一简单粗鲁用于本地测试路由中定义测试一下修改事件二生成事件和监听器在定义对应关系生成文件中注入要操作的类中方法注入对应事件类测试一下修改事件最后在模型中添加属性三利用框架的方法直接在相关中定义测试一下修改事件四定义如果想对多个模型的或事件进


一 、简单粗鲁(用于本地测试)

路由中定义:

Event::listen("eloquent.updated: AppPost",function (){
   dump("测试一下修改事件");
});
Route::post("/post/{id}", "PostController@update");
二 、生成事件和监听器

在 EventServiceProvider 定义对应关系

    protected $listen = [
        "AppEventsPostEvent" => [
                "AppListenersPostListener",
            ],
    ];
php artisan event:generate  //生成文件

event 中注入要操作的类
listen 中handle 方法注入对应事件类

    public function handle(PostEvent $event)
    {
        dump("测试一下修改事件");
    }

最后在 post 模型中添加 "events" 属性

    protected $events = [
         "updated" => PostListener::class
    ];
三 、利用框架的 boot 方法

直接在相关 Model 中定义

    public static function boot() {
        parent::boot();
        
        static::updated(function($model) {
            dump("测试一下修改事件");
        });
    }
四 、定义Trait

如果想对多个模型的updated 或 created 事件进行一些操作,该不会每个模型都多带带写一个吧.例如: 日志 .

trait LogRecord
{
    //注意,必须以 boot 开头
    public static function bootLogRecord()
    {
        foreach(static::getModelEvents() as $event) {
            static::$event(function ($model){
                $model->setRemind();
            });
        }
    }


    public static function getModelEvents()
    {
        if(isset(static::$recordEvents)){
            return static::$recordEvents;
        }
        return ["updated"];
    }

    public function setRemind()
    {
       dump("记录逻辑操作");
    }
}

然后,在模型中use trait 就可以了.

• creating - 对象已经 ready 但未写入数据库
• created - 对象已经写入数据库
• updating - 对象已经修改但未写入数据库
• updated - 修改已经写入数据库
• saving - 对象创建或者已更新但未写入数据库
• saved - 对象创建或者更新已经写入数据库
• deleting - 删除前
• deleted - 删除后
• restoring - 恢复软删除前
• restored - 恢复软删除后

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/25633.html

相关文章

  • Laravel核心解读--完结篇

    摘要:过去一年时间写了多篇文章来探讨了我认为的框架最核心部分的设计思路代码实现。为了大家阅读方便,我把这些源码学习的文章汇总到这里。数据库算法和数据结构这些都是编程的内功,只有内功深厚了才能解决遇到的复杂问题。 过去一年时间写了20多篇文章来探讨了我认为的Larave框架最核心部分的设计思路、代码实现。通过更新文章自己在软件设计、文字表达方面都有所提高,在刚开始决定写Laravel源码分析地...

    laoLiueizo 评论0 收藏0
  • Laravel 运行机制简略剖析

    1. 预备知识 1.1 composer 基本用法 1.1.1 参考文章 composer 基本用法 1.1.2 要求掌握的知识点 composer 依赖管理 composer 自动加载(关键) 1.2 DIP、IOC、DI、IOC 容器 详情文章 2. Laravel 运行机制剖析 2.1 场景 范例:http://laravel.com/test?name=chenxuelong 2.2 ...

    zhaofeihao 评论0 收藏0
  • [面试专题]一线互联网大厂面试总结

    摘要:道阻且长啊前端面试总结前端面试笔试面试腾讯一面浏览器工作原理浏览器的主要组件包括用户界面包括地址栏后退前进按钮书签目录浏览器引擎用来查询及操作渲染引擎的接口渲染引擎渲染界面和是基于两种渲染引擎构建的,使用自主研发的渲染引擎,和都使用网络用来 道阻且长啊TAT(前端面试总结) 前端 面试 笔试 面试 腾讯一面 1.浏览器工作原理 浏览器的主要组件包括: 用户界面- 包括地址栏、后退/前...

    lemanli 评论0 收藏0
  • [面试专题]一线互联网大厂面试总结

    摘要:道阻且长啊前端面试总结前端面试笔试面试腾讯一面浏览器工作原理浏览器的主要组件包括用户界面包括地址栏后退前进按钮书签目录浏览器引擎用来查询及操作渲染引擎的接口渲染引擎渲染界面和是基于两种渲染引擎构建的,使用自主研发的渲染引擎,和都使用网络用来 道阻且长啊TAT(前端面试总结) 前端 面试 笔试 面试 腾讯一面 1.浏览器工作原理 浏览器的主要组件包括: 用户界面- 包括地址栏、后退/前...

    xfee 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<