Laravel Model 事件使用注意事项

1 触发条件

1.1 updating

1.1.1 如果字段无变化,不会触发此事件。

1.1.2 除非更改至少一个字段的值

2 事件逻辑不会覆盖

2.1 Trait 中定义事件如下

/** * The boot method. */public static function bootHasArchive(){    static::creating(function ($model) {        Log::info(__FILE__);    });

    static::updating(function ($model) {        Log::info(__FILE__);    });

    static::deleting(function ($model) {        if ($archive = $model->archive) {            $archive->delete();        }    });}

2.2 Observer 中定义事件如下:
public function creating(News $news){    Log::info(__FILE__);}

public function updating(News $news){    Log::info(__FILE__);}

2.3 两个位置定义的逻辑都会执行2.4 顺序是: trait->observer3 结论3.1 update 事件用来处理 model changed 的逻辑3.2 模型数据不变,点击更新这样的逻辑,放在控制器方法中,而不应放在模型的事件中

原文地址:https://www.cnblogs.com/mouseleo/p/11691449.html

时间: 2024-08-09 05:11:39

Laravel Model 事件使用注意事项的相关文章

Laravel之事件

一.事件 事件无处不在,比如用户登录.购买商品.搜索.查看文章,等等,都是事件,有了事件,就有事件监听器,事件监听器监听到事件发生后会执行一些操作,Laravel使用观察者模式来实现这种监听机制.本节我们通过一个简单的示例来讲述在Laravel中如何创建事件类.事件对应的监听器类,以及监听器如何监听事件发生并执行相应操作. 这里我们实现一个添加任务后后写入日志的事件 二.注册事件-监听器 1.我们需要在EventServiceProvider中注册事件与监听器之间的映射关系: protected

Laravel之事件Event

适用场景:记录文章浏览量 php artisan make:event 事件名 示例: php artisan make:event MyEvent Laravel目录\app\Events已经生成MyEvent.php文件 <?php namespace App\Events; use App\Events\Event; use Illuminate\Queue\SerializesModels; use Illuminate\Contracts\Broadcasting\ShouldBroa

phalcon:model 事件与事件管理器

事件与事件管理器(Events and Events Manager)¶ Models allow you to implement events that will be thrown when performing an insert/update/delete. They help define business rules for a certain model. The following are the events supported by Phalcon\Mvc\Model an

laravel model relationship

laravel支持多种模型之间的relation,对应着模型间的one2one, one2many,many2many,hasManyThrough,Polymorphic, many2many polymorphic关系. 心法 1.所有relation都由model class上的方法来定义; 2. relationship和model本身都是以query builder作为基类的,因此对relation的操作也可以使用类似query builder的方法,比如:可以支持级联: 3.Dyna

Laravel Model 利用 Macroable 为数据模型添加宏能力

什么是ThinkSNS ?ThinkSNS(简称TS),一款全平台综合性社交系统,为国内外大中小企业和创业者提供社会化软件研发及技术解决方案. 产生需求在使用 Laravel 开发 ThinkSNS Plus 的时候,因为很多功能块都没有写在一个库里面,利用拓展包的形式添加实际功能,里面很多地方也用到了"多态多对多"的关系.问题来了,开发一个问答程序,想要给用户模型增加发布的问题或者回答的关系,起初是继承一份 User 模型,添加了关系,之后就发现问题了,因为用户的 tag 是使用多态

Laravel Model Factory(模型工厂)的用法以及数据本地化

Model Factory的位置 生成数据方法:make是生成数据,create是生成数据并保存到数据库 本地化方法 这样便生成了中文数据 整理自www.laravist.com视频教程

Laravel 5 事件的使用

事件类通常被保存在 app/Events 目录下,而它们的处理程序则被保存在 app/Handlers/Events 目录下. 事件的创建 下面我们用artisan来创建一个事件,比如叫CqhTestEvent php artisan make:event CqhTestEvent 生成的事件如下 <?php namespace App\Events; use App\Events\Event; use Illuminate\Queue\SerializesModels; class CqhTe

新建一个Model类的注意事项

昨天在工作中新建了一个Model类在测试环境测试一点问题也没有,到了生产环境就报错了,由于调用的是分页类,报错说:在520行 _count() 函数不存在. 我的思路是:先到生产环境查看了具体的报错文件,发现520行 _count() 函数存在,把runtime清理了还是不行:下一步是查看Model类文件的权限,发现是644,而其他Model类的权限都是664,修改为664就OK了.

使用dojo.connect()添加事件的注意事项

使用dojo.connect()添加事件处理器是很方便的,不用再考虑跨浏览器的问题了.但要想正确地使用这个方法,仍然要注意几个问题:        1.用dojo.byId()获取的是dom元素,而用dijit.byId()获取的是dojo widget,这两点是有根本不同的.        2.事件名称的大小写很关键,如果对dom元素添加事件处理器,事件名称要小写,例如click事件,可以用click或者on click都行,但一定要把c字母小写:如果对dojo widget添加事件处理器,事