Laravel框架事件怎么用_Laravel框架查询生命周期技巧【说明】

夜瑶同学_8309

夜瑶同学_8309

2026-04-21

291人浏览

原创

laravel事件机制通过自定义事件、监听器、模型钩子、查询构建器宏及数据库监听实现解耦与生命周期控制:一、用php artisan make:event生成事件类并触发;二、用make:listener创建监听器并在eventserviceprovider注册;三、在模型boot中使用creating/created等钩子;四、用builder::macro扩展查询构建器;五、用db::listen捕获sql执行信息。

laravel框架事件怎么用_laravel框架查询生命周期技巧【说明】

在Laravel框架中,事件机制用于解耦应用逻辑,使代码更易维护;查询生命周期技巧则涉及模型查询构建、执行及结果处理各阶段的干预方式。以下是具体使用方法:

一、定义与触发自定义事件

Laravel事件基于观察者模式,需先定义事件类与监听器,再通过Event::dispatch()或事件助手函数触发。事件对象可携带任意数据,供监听器接收处理。

1、运行命令生成事件类:php artisan make:event UserRegistered。

2、在生成的UserRegistered.php文件中,于构造函数内声明并赋值属性,如$this->user = $user。

3、在需要触发的位置调用:event(new UserRegistered($user)) 或 Event::dispatch(new UserRegistered($user))。

二、注册事件监听器并处理逻辑

监听器负责响应特定事件,可同步或异步执行。注册方式包括自动发现、手动注册于EventServiceProvider,或动态绑定。

1、运行命令生成监听器:php artisan make:listener SendWelcomeEmail --event=UserRegistered。

2、在handle方法中编写业务逻辑,例如发送邮件:$event->user->email 可直接访问事件携带的数据。

3、在EventServiceProvider的$listen数组中添加映射:'App\Events\UserRegistered' => ['App\Listeners\SendWelcomeEmail']。

三、使用模型事件钩子拦截查询生命周期

Eloquent模型提供静态事件钩子(如creating、created、updating、updated等),在模型实例状态变更时自动触发,适用于审计、默认值填充、权限校验等场景。

1、在模型类中使用静态boot方法注册钩子:static::creating(function ($model) { $model->uuid = Str::uuid(); });。

laravel-specialist
laravel-specialist

精通 Laravel 10+,遵循现代 PHP 实践的 Laravel 专家。擅长优雅语法、Eloquent ORM、队列系统及企业级特性...

下载

2、多个钩子可链式注册:static::saved(function ($model) { Log::info('Model saved', ['id' => $model->id]); });。

3、钩子内可抛出异常中断保存流程:if (empty($model->name)) { throw new ValidationException(); }。

四、利用查询构建器宏扩展生命周期控制点

通过Query Builder的macro方法注入自定义方法,在where、get、paginate等调用前后插入逻辑,实现细粒度生命周期干预。

1、在ServiceProvider的boot方法中定义宏:Builder::macro('withTrashedIfAdmin', function () { return $this->when(auth()->user()?->is_admin, function ($query) { return $query->withTrashed(); }); });。

2、在查询中调用该宏:User::query()->withTrashedIfAdmin()->get()。

3、宏内可访问当前查询实例并修改其行为,例如动态添加select字段或约束条件。

五、监听数据库查询事件获取原始SQL执行信息

DatabaseManager提供connection().listening()方法,可在每次SQL语句执行前捕获其原始SQL、绑定参数及执行时间,适用于性能分析与日志记录。

1、在服务提供者的boot方法中注册监听器:DB::listen(function ($query) { Log::debug($query->sql, $query->bindings); });。

2、$query对象包含sql、bindings、time(毫秒)、connectionName四个属性,均可直接读取。

3、可通过判断$query->time > 500筛选慢查询:if ($query->time > 500) { Slack::send("Slow query: {$query->sql}"); }。

相关专题

更多
laravel组件介绍
laravel组件介绍

laravel 提供了丰富的组件,包括身份验证、模板引擎、缓存、命令行工具、数据库交互、对象关系映射器、事件处理、文件操作、电子邮件发送、队列管理和数据验证。想了解更多laravel的相关内容,可以阅读本专题下面的文章。

2024.04.09

857

10

laravel中间件介绍
laravel中间件介绍

laravel 中间件分为五种类型:全局、路由、组、终止和自定。想了解更多laravel中间件的相关内容,可以阅读本专题下面的文章。

2024.04.09

835

9

laravel使用的设计模式有哪些
laravel使用的设计模式有哪些

laravel使用的设计模式有:1、单例模式;2、工厂方法模式;3、建造者模式;4、适配器模式;5、装饰器模式;6、策略模式;7、观察者模式。想了解更多laravel的相关内容,可以阅读本专题下面的文章。

2024.04.09

2488

10

thinkphp和laravel哪个简单
thinkphp和laravel哪个简单

对于初学者来说,laravel 的入门门槛较低,更易上手,原因包括:1. 更简单的安装和配置;2. 丰富的文档和社区支持;3. 简洁易懂的语法和 api;4. 平缓的学习曲线。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.04.10

4241

7

laravel入门教程
laravel入门教程

本专题整合了laravel入门教程,想了解更多详细内容,请阅读专题下面的文章。

2025.08.05

6090

22

laravel实战教程
laravel实战教程

本专题整合了laravel实战教程,阅读专题下面的文章了解更多详细内容。

2025.08.05

4036

13

laravel面试题
laravel面试题

本专题整合了laravel面试题相关内容,阅读专题下面的文章了解更多详细内容。

2025.08.05

7589

7

PHP高性能API设计与Laravel服务架构实践
PHP高性能API设计与Laravel服务架构实践

本专题围绕 PHP 在现代 Web 后端开发中的高性能实践展开,重点讲解基于 Laravel 框架构建可扩展 API 服务的核心方法。内容涵盖路由与中间件机制、服务容器与依赖注入、接口版本管理、缓存策略设计以及队列异步处理方案。同时结合高并发场景,深入分析性能瓶颈定位与优化思路,帮助开发者构建稳定、高效、易维护的 PHP 后端服务体系。

2026.03.04

1456

29

Laravel 框架安装指南
Laravel 框架安装指南

本指南详解 Laravel 框架安装全流程,涵盖 PHP 8.1+ 环境配置、Composer 依赖管理工具安装及国内镜像源优化。重点演示使用 composer create-project 命令创建 Laravel 10/11 项目,解决常见安装错误与依赖冲突。从环境搭建到项目初始化,助您快速完成 Laravel 开发环境部署,为后续 Web 应用开发奠定基础。适合 PHP 初学者与框架迁移开发者参考。

2026.04.09

215

6

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
如何安装 Composer
如何安装 Composer

共1课时 | 209人学习

Composer手册
Composer手册

共0课时 | 0人学习