首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

在Laravel 5.2中嵌套的雄辩模型事件不会触发吗?

在Laravel 5.2中,嵌套的雄辩模型事件不会自动触发。雄辩模型事件是指在模型的创建、更新、删除等操作时,自动触发的事件。然而,在嵌套关系中,如果你在父模型中触发了一个事件,它不会自动传播到子模型中。

要使嵌套的雄辩模型事件触发,你需要手动在父模型中调用子模型的事件。这可以通过在父模型的事件处理方法中手动触发子模型的事件来实现。具体步骤如下:

  1. 在父模型中定义一个事件处理方法,例如afterSave
  2. 在该方法中,手动触发子模型的事件。你可以使用dispatch方法来触发事件,传递子模型实例作为参数。
  3. 在子模型中定义对应的事件处理方法,例如onParentSaved
  4. 在子模型的事件处理方法中编写你想要执行的逻辑。

以下是一个示例代码:

代码语言:txt
复制
// 父模型
class ParentModel extends Model
{
    public function afterSave()
    {
        // 手动触发子模型的事件
        ChildModel::dispatch($this->childModel);
    }
}

// 子模型
class ChildModel extends Model
{
    public function onParentSaved(ParentModel $parent)
    {
        // 子模型事件处理逻辑
    }
}

这样,当父模型保存后,调用afterSave方法时,会触发子模型的onParentSaved事件处理方法。

关于Laravel 5.2中嵌套的雄辩模型事件的更多信息,你可以参考Laravel官方文档

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

3分钟短文 | Laravel模型关联删除表记录,用观察者还是事件钩子

本文就来说说 Laravel ORM 操作中事件钩子。 学习时间 如果想要实现上一节所说需求,代码写起来可能是这样。 $user->delete(); 当该事件发生时,我们接着执行关联删除。...那么Laravel中是怎么写呢,如何自动触发了 user 删除时间,自动进行 photo 删除操作?我们可以借助于 Eloquent ORM 提供 deleting 事件,做删除动作。...只用在 Model 模型类中继承并实现 boot 方法,然后调用模型 deleting 事件,使用回调声明执行动作即可。...这样删除动作上只用维护一处代码,程序内所有的 delete 事件都会自动触发该动作,复用率大大地提升了。 再进一步 实现同样需求,往往有很多种方式。...这样把程序功能单独摘开,调试时候非常方便。而且对于后期有修改,或者复杂动作,处理起来就会游刃有余,不会把代码逻辑写一堆又一堆,事件方法内,你只需集中处理一次就够了! 这才是有弹性代码!

1.9K10

你可能会踩到一个 Eloquent 小坑

今天写一个模型版本控制需求,目标就是模型有字段变化时创建版本记录,首先想到肯定是用我之前写过一个包:overtrue/laravel-versionable,原理很简单: 监听模型事件,当检测到属性值变化时...,选择已快照或者差异化获取变化内容,存储到一个版本记录表当中 Eloquent 模型事件 模型事件相信大家都非常熟练了,一句话介绍就是:当模型有各种变化时,Laravel触发对应事件通知,目前支持事件有...所以有了事件通知就可以做很多事情了,我这个包做了一个功能,模型可以自己动态决定是否要为当前变更创建版本,只需要在模型里重载一个方法返回布尔值即可: public function shouldVersioning...(){ return true;} 掉坑里了 我们需求是只有当 document_id 有修改时候才创建版本,心想那还不简单,Model 不是有一个 getChanges 方法: public...当我翻到源码时候眼泪掉下来: getChanges 只 Model::performUpdate() 这个方法时才会从 getDirty() 拷贝内容,而 getDirty() 结果是只要赋值(fill

49020

Laraval IDE 自动补全插件 laravel-ide-helper

而插件 laravel-ide-helper就是用来解决这个问题。...二、laravel-ide-helper介绍 Laravel IDE Helper 是一个比较好用代码提示及补全工具,可以给编写代码带来极大便利。...强烈推荐选择 yes,这样在跟踪文件时候不会跳转到「ide_helper_models.php」文件,不过这么做最好对模型文件做个备份,至少在生成注释之前用 git 控制一下版本,以防万一。...四、知识拓展 知识扩展:Composer 在运行过程中将会触发以下事件事件名称 详细说明 pre-install-cmd install 命令执行前触发。...**注意:**Composer 不会去执行任何依赖包中定义 install 或 update 相关脚本。因此你不应该在依赖包中申明 pre-update-cmd 或 pre-install-cmd。

3.4K40

Laravel 模型事件应用

Laravel模型事件中处理起来很方便:https://laravel-china.org/docs/laravel/5.5/eloquent#events Laravel 模型事件有两种方式,...(大概如图中) providers app目录下新建文件夹Observers存放模型观察器,并新建基类LogBaseServer并在构造函数构建基本属性(CLI是因为命令行执行时不存在用户执行...ObserverLogServiceProvider中运行 ObserverLogServiceProvider 为需要模型注册事件(我这挺多,之后大概长这样) 模型注册事件...然后我们触发一些事件(增删改,表数据就有了) 事件 多对多关联插入不会触发模型(比如attach方法) 这时候就需要自己新建事件类来模拟(这里拿分配权限给角色粗略说一下) EventServiceProvider...PermissionRoleEventLog 之后应用事件 事件 更优雅处理登录注销事件 EventServiceProvider中subscribe属性绑定好处理

17910

Laravel Eloquent 模型关联关系(下)

统计关联模型 我们还可以通过 Eloquent 提供 withCount 方法不加载关联模型情况下统计关联结果数量。...,通过 IN 查询获取关联结果,并将其附着到对应模型实例上,在后面访问时候不会再对数据库进行查询。...($tagId, $attributes); 触发模型时间戳更新 当一个模型归属于另外一个模型时,例如 Comment 模型归属于 Post 模型,当子模型更新时,父模型更新时间也同步更新往往很有用...Eloquent 提供了这种同步机制帮助我们更新子模型触发模型更新时间 updated_at 字段值更新,要让该机制生效,需要在子模型中配置 $touches 属性: // 要触发更新父级关联关系...(31); $comment->content = 'Laravel学院致力于提供优质Laravel中文学习资源'; $comment->save(); 再次查看评论模型及对应文章模型数据,可以看到文章模型更新事件和评论模型更新时间已经一致了

19.5K30

cell-blog 开发记录

然后运行下面的命令来发布资源: 1 php artisan admin:publish 该命令会生成配置文件config/admin.php,可以在里面修改安装地址、数据库连接、以及表名,建议都是用默认配置不修改...extensions' => [ League\CommonMark\Extension\TaskList\TaskListExtension::class, ], Eloquent 模型事件...Eloquent 模型可以触发事件,允许你模型生命周期中多个时间点调用如下这些方法:retrieved, creating, created, updating, updated, saving,...事件允许你一个指定模型类每次保存或更新时候执行代码。 retrieved 事件会在从数据库中获取已存在模型触发。当一个新模型被首次保存时候,creating 和 created 事件会被触发。...如果一个模型已经在数据库中存在并调用 save 方法,updating/updated 事件会被触发,无论是创建还是更新,saving/saved 事件都会被触发

86640

【说站】laravel模型$casts属性转换

按照以往操作,create时候,先手动对特定字段进行json_encode,然后再create; 而update时候,先手动json_decode,修改完毕后再json_encode,然后再...update; 想想都觉得麻烦,虽然可以使用laravel模型事件,在对应creating或updating事件中去处理,但这也太大材小用了。...fillable,主键字段名(默认id)primaryKey,主键字段类型(默认int)keyType,主键是否自增(默认是)incrementing,等等,这里主要说是属性转换casts,模型中设置一下即可...但是需要注意是,create时候会进行属性转换处理,但是更新时候,如果是直接使用update进行更新,则不会进行属性转换处理。...可参考:laravel模型事件-update触发updating和updated问题 先使用first或者find获取模型后再操作即可,当然,updateOrCreate也可以。。

1.7K10

Laravel学习教程之广播模块详解

前言 本文主要给大家介绍了关于Laravel广播模块相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细介绍: 注意:本文是基于Laravel 5.4版本路由模块代码进行分析书写; 简介...,这个广播消息是由B同学评论这个动作触发了发送广播消息; 整个广播行为中,有一个重要概念叫频道channel,频道类型有 公共频道public 私有频道private 存在频道presence 移动端订阅了公共频道...ShouldBroadcastNow接口事件放入队列中时,会被放入叫sync队列中) 举个例子, 第一步,IlluminateAuthEventsLogin事件是用户登录成功后会触发事件,略作改动...($user) { return (int) $user->id === 1; }); 有读者会疑问,前端页面订阅频道不是private-first-channel?...附录 同类型文章可参考以下,加深了解: Laravel学院 事件广播基础知识 Pusher 认识

1.5K50

php-laravel Redis 广播

前言很多现代 Web 应用中,WebSockets被用于实现实时更新用户接口。当一些数据服务器上被更新,通常一条消息通过 Websocket 连接被发送给客户端处理。...这为我们提供了一个更强大、更有效选择来持续拉取应用更新。为实现这样应用,Laravel 中 通过 Websocket 连接广播事件使开发变得简单。...广播 Laravel 事件允许你服务端和客户端 JavaScript 框架之间共享同一事件名本 文档 仅使用了 redis广播驱动 简介laravel 广播系统和队列系统类似,需要两个进程协作,一个是...(y/N) // 要设置对API跨域访问?(y/n)N Configuration file saved....$this->user->id); } // //Laravel 默认会使用事件类名作为广播名称来广播事件,自定义: // public

11010

Laravel源码解析之事件系统

我们还是通过官方文档里给出这个例子来向下分析事件系统源码实现,不过应用注册事件和监听器之前,Laravel应用启动时会先注册处理事件 events服务。...所以监听者返回闭包都是为了包装好事件注册时上下文,等待事件触发时候调用闭包来执行任务。...触发事件 可以用事件名或者事件对象来触发事件触发事件时用是 Event::fire(newOrdershipmentNotification), 同样它也来自 events服务 public function...如果触发事件时传递了halt参数,listener返回非 false后那么事件不会往下继续传播给剩余listener了,否则所有listener返回值会在所有listener执行往后作为一个数组统一返回...Laravel事件系统原理还是跟之前讲观察者模式一样,不过框架作者功力深厚,巧妙结合应用了闭包来实现了事件系统,还有针对需要队列处理事件,应用事件一些比较复杂业务场景中能利用关注点分散原则有效地解耦应用中代码逻辑

1K40

Laravel 5.0 之事件及处理程序

比如在 Laravel 4 中,可以直接以事件名称字符串来触发事件(而不是像上面那样通过对象和方法): $response = Event::fire('auth.login', array($user... Laravel 5 中,事件系统已经得到了升级,看上去与上一篇文章中介绍过命令系统有几分相似。...SerializesModels trait 还是与命令一样,如果你需要在事件中用到某个 Eloquent 模型,你可以事件代码顶部包含 SerializesModels 这个 trait。...本文写作时,生成时间代码实际上已经默认包含了这部分。 写在最后 就这么多了。只要你理解了 Laravel 5 命令和处理程序,掌握事件处理机制就是一件非常容易事了。...触发系统向整个应用发出通知说某个事件发生了,而不是要求系统执行某些操作。但本质上它们都是封装信息和目的。它们可以互相配合使用,结果会更棒!

1.1K50

Laravel 验证码认证学习记录小结

/laravel/framework/src/Illuminate/Auth/MustVerifyEmail.php ,因为此文件采用 trait 声明,因此我们快速将内容通过 use 集成到用户模型中...,我们可以接入 larave 自带邮箱验证接口 Illuminate\Contracts\Auth\MustVerifyEmail,规定模型必须拥有相关方法,具体方法如下(方法 MustVerifyEmailTrait...,触发邮件发送; getEmailForVerification() 获取发送邮件地址,提供这个接口允许你自定义邮箱字段。...$this- validator($request- all())- validate(); // 创建用户同时触发用户注册成功事件,并将用户传参 event(new Registered($...( 打开 app/Providers/EventServiceProvider.php 文件,此文件 $listen 属性里我们可以看到注册了 Registered 事件监听器: protected

2.8K51

基于 Laravel 用户动态模块开发

概念抽象 用户动态,顾名思义,动态产生,就是一系列事件历史记录,所以首先关注“事件”这个名词,它有哪些属性: 触发者,基于社区所有的事件几乎都是由用户触发 事件主体,事件主体信息,例如“xxx发布了文章...事件属性,事件主体不同,所需要附加信息也不同,比如事件类型。 发生时间,记录事件产生时间,当然了我们数据库通常记录了所有数据产生时间。...事件产生时间 而主体部分就是 Laravel morph relation, 多态关联。...protected $subscribe = [ \App\Listeners\UserActivitySubscriber::class, ]; 上面我们利用了 Eloquent 模型事件来监听模型变化...,当各种模型事件创建时候我们调用对应方法来记录动态,所以实现起来非常方便。

1.5K30

3分钟短文 | Laravel 日志全程记录 SQL 查询语句,要改写底层?

引言 Laravel 提供给了比较强大ORM数据库操作方式,如果在数据库端考虑到性能问题, 难以打开MySQL慢日志,或者出于审计考虑,要在系统内全程跟踪所有的SQL操作, 应该如何实现呢?...不会要改写框架底层代码? ? 本文就来为大家提供解决思路。 学习时间 因为考虑到是全局记录SQL语句,那么肯定不可能在所有的数据库模型操作上都手动加上日志, 那样效率实在是令人胆寒。...所以方法只能是独立于系统之外地方寻求突破口。事件是个不错想法。...因为laravel框架提供了事件监听方式,可以系统启动过程中注册一个事件触发器收集过程数据,记录该流程内SQL操作,应该就大差不差了。 比如注册 illuminate.query 事件。..., array('%%', '%s'), $query); $query = vsprintf($query, $bindings); 注意laravel生成SQL语句占位符是问号,而vsprintf

1.6K30

Laravel5.7 Eloquent ORM快速入门详解

注:通过 Eloquent 进行批量更新时,saved 和 updated 模型事件不会在更新模型触发。这是因为进行批量更新时并没有从数据库获取模型。...$deletedRows = App\Flight::where('active', 0)- delete(); 注:通过 Eloquent 进行批量删除时,deleting 和 deleted 模型事件删除模型不会触发...,可以使用 restore 方法: $flight- restore(); 你还可以查询中使用 restore 方法来快速恢复多个模型,同样,这也不会触发任何模型事件: App\Flight::withTrashed...事件允许你一个指定模型类每次保存或更新时候执行代码。 retrieved 事件会在从数据库中获取已存在模型触发。当一个新模型被首次保存时候,creating 和 created 事件会被触发。...注:通过 Eloquent 进行批量更新时,模型事件 saved 和 updated 不会在更新模型触发,这是因为这些模型进行批量更新时没有真正检索过。

15K41

基于Model Event模型事件Laravel实时APP

模型生命周期中包含事件:created、creating、saved、saving、updated,updating、deleted、deleting、restored、restoring,同时结合了...Pusher包,有关Pusher注册和使用相关信息可以参考:(基于 Pusher 驱动 Laravel 事件广播)(上)。...备注:Laravel对ModelCRUD操作都会触发对应事件,如create操作会在创建前触发creating事件,创建后触发created事件,即Model Event。...Eloquent每一CRUD操作都会触发Model事件,可以service provider里监听这些事件从而触发新建三个广播事件AppServiceProvider中: class AppServiceProvider...嘛,过两天还想结合LaravelContainer Event容器事件新开篇文章,到时见。

5.5K31

基于 Redis 消息队列实现 Laravel 事件监听及底层源码探究

Laravel 中,除了使用 dispatch 辅助函数通过 Illuminate\Bus\Dispatcher 显式推送队列任务外,还可以通过事件监听方式隐式进行队列任务推送,在这个场景下,事件监听器实际上扮演了...,这里我们引入了 Post 模型实例,以便在事件监听器中进行相应处理,事件类中默认还有一个 broadcastOn 表示事件广播通道,我们在后面介绍广播时再详细介绍这个方法。...还是基于通配符,还是基于 PHP 类(这些示例都可以 Laravel 事件文档中看到),在这里通通一览无余,以我们定义 $listen 数组为例,最终所有事件类和对应监听器处理逻辑映射关系都被维护到...所有事件对应监听器处理逻辑此时都是闭包函数,只有在对应事件触发时才会真正执行,我们执行时再详细剖析 makeListener 方法底层实现。...shouldQueue 方法判断当前事件监听器是否满足推送到队列执行条件(所以可以事件监听器类中基于这个方法实现按条件推送到队列),如果不满足也不会推送到队列,如果满足则调用 queueHandler

3.4K30

事件驱动编程解救臃肿代码

在这篇文章中我们将了解到什么是“事件驱动编程”以及Laravel中如何开始构建一个事件驱动应用,同时我们还将看到如何通过事件驱动编程来对应用程序逻辑进行解耦。...开始之前,先说明一下这篇文章主要是阐述事件驱动这种编程思维和理念,所以不会涉及到Laravel Events方方面面。...Javascript事件是像鼠标点击、鼠标悬浮、按下键盘这样用户动作。Laravel事件是发生在应用程序中动作,像邮件通知、记录日志、用户注册、CRUD操作等。...发起一个事件不会让应用程序执行任何相应操作,我们必须在事件处理程序中对被发起事件进行相应地回应。...首先,事件是一种解耦应用程序各个方面的好方法,因为单个事件可以有多个不依赖于彼此监听器。通过解耦,不会因为你使用了不适合域逻辑代码而污染了代码库。

2K30

Laravel 6.10 版本发布,支持 PHPUnit 9,为 PHP 8 留下后手

第一部分:重要新特性介绍 下面,我们一起来看下几个重要新特性: Laravel Mix 测试辅助函数 新版本中,可以通过 withoutMix() 和 withMix() 测试辅助函数启用或禁用异常处理...Redis 连接类支持定义宏方法 和 Laravel 框架中其他支持 macro 方法类一样,现在可以 Redis Connection 上调用 macro 定义宏方法: use Illuminate...问题修复 修复 Blueprint 中 float 数据库字段类型 修复依赖 getenv() 代码 防止重连时进行实际 PDO 连接 修复针对嵌套数据 exclude_if/exclude_unless...验证规则 将 dev-master 分支别名从 6.0-dev 修改为 6.x-dev 使用 Symfony PSR 工厂修复 #31027 在数据库验证器中默认使用模型连接 代码优化 优化服务提供者注册...事件不包含我期望事物级别 重构代码 重构 BladeCompiler::compileString() 方法 声明:本文翻译整理自 Laravel News

2.5K30
领券