laravel学习笔记之模型事件的几种用法示例


Posted in PHP onAugust 15, 2017

前言

本文主要给大家介绍了关于laravel模型事件用法的相关内容,文中通过示例代码介绍了laravel模型事件的多种用法,下面话不多说了,来一起看看详细的介绍吧。

用法示例

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

路由中定义:

Event::listen('eloquent.updated: App\Post',function (){
 dump('测试一下修改事件');
});
Route::post('/post/{id}', 'PostController@update');

二 、生成事件和监听器

在 EventServiceProvider 定义对应关系

protected $listen = [
  'App\Events\PostEvent' => [
    'App\Listeners\PostListener',
   ],
 ];
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 - 恢复软删除后

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

PHP 相关文章推荐
php 接口类与抽象类的实际作用
Nov 26 PHP
php 抽象类的简单应用
Sep 06 PHP
PHP中通过HTTP_USER_AGENT判断是否为手机移动终端的函数代码
Feb 14 PHP
phpadmin如何导入导出大数据文件及php.ini参数修改
Feb 18 PHP
解析php中mysql_connect与mysql_pconncet的区别详解
May 15 PHP
php分页函数完整实例代码
Sep 22 PHP
php中smarty区域循环的方法
Jun 11 PHP
PHP编程开发怎么提高编程效率 提高PHP编程技术
Nov 09 PHP
php实现图片上传并进行替换操作
Mar 15 PHP
php微信开发之关注事件
Jun 14 PHP
Yii2.0 RESTful API 基础配置教程详解
Dec 26 PHP
Thinkphp 框架配置操作之配置加载与读取配置实例分析
May 15 PHP
PHP实现的回溯算法示例
Aug 15 #PHP
php简单中奖算法(实例)
Aug 15 #PHP
PHP实现的随机红包算法示例
Aug 14 #PHP
详解PHP中的 input属性(隐藏 只读 限制)
Aug 14 #PHP
IOS 开发之NSDictionary转换成JSON字符串
Aug 14 #PHP
PHP+AjaxForm异步带进度条上传文件实例代码
Aug 14 #PHP
利用laravel搭建一个迷你博客实战教程
Aug 13 #PHP
You might like
php微信开发之谷歌测距
2018/06/14 PHP
用函数式编程技术编写优美的 JavaScript
2006/11/25 Javascript
JQuery在光标位置插入内容的实现代码
2010/06/18 Javascript
IE无法设置短域名下Cookie
2010/09/23 Javascript
深入理解JavaScript系列(13) This? Yes,this!
2012/01/18 Javascript
当鼠标移动时出现特效的JQuery代码
2013/11/08 Javascript
Javascript节点关系实例分析
2015/05/15 Javascript
使用jspdf生成pdf报表
2015/07/03 Javascript
JS模拟Dialog弹出浮动框效果代码
2015/10/16 Javascript
JavaScript中Textarea滚动条不能拖动的解决方法
2015/12/15 Javascript
jquery删除数组中重复元素
2016/12/05 Javascript
浅谈原型对象的常用开发模式
2017/07/22 Javascript
js 获取html5的data属性实现方法
2017/07/28 Javascript
electron制作仿制qq聊天界面的示例代码
2018/11/26 Javascript
nuxt配置通过指定IP和端口访问的实现
2020/01/08 Javascript
在Vue 中实现循环渲染多个相同echarts图表
2020/07/20 Javascript
Vue+Element ui 根据后台返回数据设置动态表头操作
2020/09/21 Javascript
[02:08]什么藏在DOTA2 TI9“小紫本”里?斧王历险记告诉你!
2019/05/17 DOTA
浅谈django model的get和filter方法的区别(必看篇)
2017/05/23 Python
pandas数据预处理之dataframe的groupby操作方法
2018/04/13 Python
python opencv实现旋转矩形框裁减功能
2018/07/25 Python
浅谈python之新式类
2018/08/12 Python
Django如何将URL映射到视图
2019/07/29 Python
jupyter 中文乱码设置编码格式 避免控制台输出的解决
2020/04/20 Python
html Table 表头固定的实现
2019/01/22 HTML / CSS
运动会通讯稿150字
2014/02/15 职场文书
幼儿园教师获奖感言
2014/03/11 职场文书
车队司机个人自我鉴定
2014/04/17 职场文书
酒店管理专业自荐信
2014/05/23 职场文书
法人身份证明书
2014/10/08 职场文书
2014年转正工作总结
2014/11/08 职场文书
归途列车观后感
2015/06/17 职场文书
学校食堂管理制度
2015/08/04 职场文书
快消品行业营销模式与盈利模式分享
2019/09/27 职场文书
使用Golang的channel交叉打印两个数组的操作
2021/04/29 Golang
mongodb数据库迁移变更的解决方案
2021/09/04 MongoDB