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

Laravel Eloquent $model->getChanges()在更新事件中始终为空

Laravel是一种流行的PHP开发框架,提供了丰富的功能和工具来简化Web应用程序的开发过程。其中,Eloquent是Laravel框架中的ORM(对象关系映射)工具,用于与数据库进行交互和操作。

在Laravel中,Eloquent提供了一个非常有用的方法$model->getChanges(),用于获取模型在更新事件中所发生的变化。然而,当在更新事件中调用$model->getChanges()时,返回的结果始终为空的情况可能有以下几个原因:

  1. 未对模型进行任何更改:如果在更新事件中调用$model->getChanges()时,模型并没有发生任何更改,那么返回的结果将为空。这可能是因为在更新事件中没有对模型的属性进行修改。
  2. 未正确使用Eloquent的更新方法:在Laravel中,使用Eloquent进行模型的更新操作应该使用save()方法或update()方法。如果在更新事件中使用了其他方式进行模型的更新,例如直接执行SQL语句,那么$model->getChanges()可能无法正确获取到变化。
  3. 未正确设置模型的可更新属性:在Laravel中,模型的可更新属性需要在模型类中进行设置。如果在更新事件中修改了模型的其他属性,但这些属性并没有被设置为可更新属性,那么$model->getChanges()将无法正确获取到变化。

总结起来,当在Laravel中使用Eloquent的$model->getChanges()方法在更新事件中始终为空时,可能是因为模型没有发生任何更改、未正确使用Eloquent的更新方法或未正确设置模型的可更新属性。需要仔细检查代码逻辑和使用方式,确保正确地使用Eloquent进行模型的更新操作。

关于Laravel和Eloquent的更多信息,您可以参考腾讯云的相关产品和文档:

  • 腾讯云产品:云服务器CVM(https://cloud.tencent.com/product/cvm)
  • 腾讯云产品:云数据库MySQL(https://cloud.tencent.com/product/cdb_mysql)
  • 腾讯云产品:云开发(https://cloud.tencent.com/product/tcb)
  • Laravel官方文档(https://laravel.com/docs)
  • Laravel中文文档(https://learnku.com/docs/laravel/8.x)
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

你可能会踩到的一个 Eloquent 小坑

今天写一个模型版本控制的需求,目标就是模型有字段变化时创建版本记录,首先想到的肯定是用我之前写过的一个包:overtrue/laravel-versionable,原理很简单: 监听模型事件,当检测到属性值变化时...,选择已快照或者差异化获取变化的内容,存储到一个版本记录表当中 Eloquent 模型事件 模型事件相信大家都非常熟练了,一句话介绍就是:当模型有各种变化时,Laravel 会触发对应的事件通知,目前支持的事件有...isDirty 也可以达到目标,就感觉 getChanges 更表意一些,结果就掉坑里了:只有更新时才有版本记录,创建时没有。...当我翻到源码的时候眼泪掉下来: getChanges Model::performUpdate() 这个方法时才会从 getDirty() 拷贝内容,而 getDirty() 的结果是只要赋值(fill...)就能得到变化结果,所以,getChanges 只是针对 update 行为的结果有效。

49220

Laravel系列4.3】模型Eloquent ORM的使用(一)

其实,Laravel Eloquent ORM 也是 Active Record 的实现,这也是现在 ORM 的主流。...之所以要有外键这个东西,主要也是为了数据之前能够在数据库层面保持一定的关联,这样我们就可以做一些特殊的操作,比如说定义数据库的事件或者定时任务之类的,或者关联删除的时候能够更加有效率。...当然, Laravel ,可以不在数据库层面进行严格的设置,就可以框架代码实现主外键的关联。...其实这段代码已经很清楚明了了,如果没有 key 就返回一个的内容,如果 key 存在于当前这个模型类的相关属性,则调用一些处理方法后返回。...接下来,如果这个 key 是 Model 基类的某个方法时,直接返回一个的内容。注意,这里又用到了我们之前学习过的一个技巧,大家能看出来吗?

8.8K20

Laravel 中使用 Trait 优化代码结构

今天给大家介绍的是 Laravel 中使用 Trait 优化代码结构,说起 Trait ,我一开始不知道是什么样的存在,有个模糊的印象是:复用。...\auth()->id();} // 封装一个上述公共方法,然后模型调用,或者控制器调用。 从上面的示例中发现这些操作都不是很好,不够优雅,哈哈。...现在我们来看看 laravel Trait 是如何定义和使用的: // 定义 trait HasCreator{ public static function bootHasCreator()...开始 官方解释: Trait 是类似 PHP 的单继承语言而准备的一种代码复用机制。Trait 为了减少单继承语言的限制,使开发人员能够自由地不同层次结构内独立的类复用 method。...结束语 就简单的给大家介绍一下 Trait Laravel 如何使用的,写的不对的地方和补充欢迎大家留言噢,哈哈。

1.5K20

Laravel 6.7.0 版本发布,支持不加载关联关系

Laravel 开发团队本周发布了 v6.7.0 版本,新增了一些新特性,以及对之前版本问题的修复。...1、新增特性一览 下面我们对其中一些比较值得关注的代码调整做简单的介绍: Eloquent 模型类引入的 HasTimestamps Trait 新增了两个方法用来返回完整的创建和更新时间字段名(包含表名...): $model->getQualifiedCreatedAtColumn(); // 例如 users.created_at $model->getQualifiedUpdatedAtColumn...: 此外,一个比较重要的更新Eloquent 模型类现在还新增了 withoutRelations() 方法,用来支持队列任务不加载关联关系,从而提高性能。...我们可以队列任务的构造函数调用该方法: /** * Create a new job instance.

1.6K20

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

前言 本文主要给大家介绍了关于laravel模型事件用法的相关内容,文中通过示例代码介绍了laravel模型事件的多种用法,下面话不多说了,来一起看看详细的介绍吧。...用法示例 一 、简单粗鲁(用于本地测试) 路由中定义: Event::listen('eloquent.updated: AppPost',function (){ dump('测试一下修改事件');...}); Route::post('/post/{id}', 'PostController@update'); 二 、生成事件和监听器 EventServiceProvider 定义对应关系 protected...方法注入对应事件类 public function handle(PostEvent $event) { dump('测试一下修改事件'); } 最后 post 模型添加 'events' 属性...static::$recordEvents; } return ['updated']; } public function setRemind() { dump('记录逻辑操作'); } } 然后,模型

66710

—— laravel

上述代码还有一个错误是:仓库返回 Eloquent 模型,这会使你的业务逻辑层跟 Eloquent 耦合。...而且,一开始就建立仓库是没有意义的,它只是 Eloquent 查询的抽象,根据定义,ORM 抽象不是仓库模式。那么,如果返回自定义的对象并且在上层逻辑不再使用 Eloquent 呢?...这种方式当然可以,但是这会让你不能使用 Laravel 很多重要的功能。... Laravel 中文官方文档,推荐的最佳实践有说,“绝不 使用 Repository,因为我们不是写 JAVA 代码,太多封装就成了「过度设计(Over Designed)」,极大降低了编码愉悦感...Laravel 应用中一般会包含以下4层:UIControlleServiceDatabase/Eloquent一个简单的 service 可能长这样:class UserService{ protected

1.9K30

Laravel5.7 Eloquent ORM快速入门详解

时间戳 默认情况下,Eloquent 期望 created_at 和 updated_at 已经存在于数据表,如果你不想要这些 Laravel 自动管理的数据列,模型类设置 $timestamps...注:通过 Eloquent 进行批量更新时,saved 和 updated 模型事件将不会在更新模型时触发。这是因为进行批量更新时并没有从数据库获取模型。...事件允许你一个指定模型类每次保存或更新的时候执行代码。 retrieved 事件会在从数据库获取已存在模型时触发。当一个新模型被首次保存的时候,creating 和 created 事件会被触发。...注:通过 Eloquent 进行批量更新时,模型事件 saved 和 updated 不会在更新模型上触发,这是因为这些模型进行批量更新时没有真正检索过。...举个例子, Eloquent 模型定义一个 $dispatchesEvents 属性来映射模型生命周期中多个时间点与对应事件类: <?

15K41

Laravel Eloquent 模型关联关系(下)

前提是 user_id 允许 null,否则会抛出异常。 对象模型 如果外键字段 user_id 允许的话,当我们访问 Post 模型上的 author 属性时,默认返回 null。...Eloquent 允许我们这种对象定义一个默认的类型,这个对象的类型可以定义关联关系的时候指定: public function author() { return $this->belongsTo...: 该特性其实应用了设计模式对象模式,好处是代码里可以为不同情况编写一致性代码。...Eloquent 提供了这种同步机制帮助我们更新子模型时触发父模型的更新时间 updated_at 字段值更新,要让该机制生效,需要在子模型配置 $touches 属性: // 要触发更新的父级关联关系...(31); $comment->content = 'Laravel学院致力于提供优质Laravel中文学习资源'; $comment->save(); 再次查看评论模型及对应文章模型数据,可以看到文章模型的更新事件和评论模型的更新时间已经一致了

19.5K30

Laravel源码分析之模型关联

Eloquent Model让应用依然能用Fluent Api的方式访问和设置主体数据的关联数据。...开发我们经常遇到的关联大致有三种:一对一,一对多和多对多,其中一对一是一种特殊的一对多关联。我们通过官方文档里的例子来看一下Laravel是怎么定义这两种关联的。...\Relations\BelongsToMany类的实例,与定义一对多关联时一样,实例化BelongsToMany时定义里与关联相关的配置:中间表名、关联的模型、父模型中间表的外键名、关联模型中间表的外键名...($relations as $name => $constraints) { //如果$name是数字索引,证明没有为预加载关联模型添加约束条件,为了统一把它的约束条件设置一个的闭包...*注: 下面的代码为了阅读方便我把一些父类里定义的方法拿到了HasMany,自己阅读时如果找不到请去父类找一下。

9.5K10

Laravel Eloquent分表方法并使用模型关联的实现

众所周知 Laravel 是 PHP 开发项目最优美的框架之一,尤其是 Eloquent 对数据库的操作提供了特别多的便利。...实际开发我们经常涉及到分库分表场景,那么怎样才能继续配合 Eloquent 优雅的使用 Model 模型呢,接下来给大家分享下我实际开发中所遇到的问题。...配合我们实际项目更能清晰表述) 1、假设我们有一万本书籍,每本书籍有两千章节,我们创建数据库时的表结构是书籍信息表:books;以及章节信息表:chapters,前面说到书籍越多章节数也就越多解决方案是将章节表分成十个形式...chapters_0、chapters_1、……chapters_9 表后缀规则是书籍 ID 与 10 取余,这样所有的书籍章节会分散在这 10 个 chapters 。...$attributes = [], $exists = false) { $model = parent::newInstance($attributes, $exists); $model

2.2K42

基于独立的 Laravel Eloquent 组件编写 ORM 模型类

下载 Eloquent ORM 相关扩展包 Eloquent ORM 作为 Laravel 框架自带的 ORM 实现,还可以 Laravel 框架之外作为独立的 ORM 组件使用。...Eloquent 提供的模型事件功能,还可以下载 Laravel 提供的独立事件扩展包: composer require illuminate/events 上述扩展包下载完成后,就可以博客项目根目录下的...初始化数据库连接 首先我们 app/bootstrap.php 引入 Eloquent ORM 的 Capsule 类完成数据库连接初始化,在此之前,先在配置文件 config/app.php 调整数据库连接配置符合...这里,我们通过设置 $timestamps 属性 false 表示禁用 Eloquent 模型类自动维护时间字段机制。...MVC 模式博客应用的落地,下篇教程,我们将探索如何通过现代工程化的方式管理前端资源和依赖,我们将引入 NPM、Webpack、Laravel Mix、jQuery 和 Bootstrap,并基于这些工具和框架替换博客应用主题

1.9K10

竟然有人质疑我还在用Laravel开发?别忘了PHP是最好的语言。(2)模型工厂类

个人认为Laravel是非常优雅的开发框架:优雅的设计模式、强大的功能实现、各种方便的扩展、持续的版本更新,更主要的是迄今为止我认为最优秀的技术开发社区。 我必须Laravel打Call。...组件,Tailwind 分页视图, 时间测试助手,artisan serve 的改进,事件监听器的改进,以及各种其他错误修复和可用性改进,对 Laravel 7.x 继续进行了改善。...所有相关的生成器命令均已更新,假定模型存在于 app/Models 目录(如果存在)。如果该目录不存在,则框架将假定你的模型应放置 app 目录。...Eloquent 模型工厂 已完全重写基于类的工厂,并有完美的关联支持。例如 Laravel 的 UserFactory 是这样写的: <?.../legacy-factories 扩展包,可以 Laravel 8 中支持以前的模型工厂。

2.7K41

Laravel 软删除存在的问题

1、软删除使用的标记类型是时间类型,通过is null条件查询,删除标记取值不支持定义 //Illuminate\Database\Eloquent\SoftDeletingScope public...function apply(Builder $builder, Model $model) { $builder->whereNull($model->getQualifiedDeletedAtColumn...,如果类常量DELETED_ATnull,则不执行相应的软删除操作 4、join操作,只会在对当前模型添加软删除查询条件 5、belonsToMany关联关系,如果关联表,中间表,被关联表都有软删除字段...被关联表是一个类对象,如果应用了软删除,则会自动附加上软删除条件 6、hasManyThrough关联关系,如果关联表,中间表,被关联表都有软删除字段,查询关联关系,会对中间表应用删除条件。...从上面可以看出,Laravel的软删除,关联关系中会造成一些查询上条件的歧义,非常容易产生bug.而且,belongsToMany中间表的问题是无解的。

2.2K20

orm 系列 之 Eloquent演化历程1

Eloquent Eloquentlaravel的orm,采取的是active record的设计模式,里面的对象不仅包括领域逻辑,还包括了数据库操作,但是大家平时使用的时候可能没有探究eloquent...note:此处版本是54d73c6,通过 git co 54d73c6 可以查看 model引入 接着我们继续演化,要引进Model,要实现Active Record模式,46966ec首次加入了...调用Eloquent\Builder的get的时候,里面有个逻辑是: if (count($models) > 0) { $models = $this->eagerLoadRelations($...return $this->belongsToMany('App\Role', 'user_roles', 'user_id', 'role_id'); 构造函数,会调用addConstraints...到这,我们就分析完了eloquentf6e2170版本上具有的功能了,到目前为止,eloquent的类图如下: 总结 目前,我们分析到的版本是f6e2170,已经具备了一个orm该需要的功能了,Connection

1K30

Laravel 6.11 版本发布,优化了 Redis 多频道广播逻辑

Laravel 官方开发组本周发布了 Laravel 6.11.0 版本,新版本 Eloquent 模型查询时新增 firstWhere 方法,优化了基于 Redis 的多频道广播,以及一些现有版本的问题修复...优化 Redis 多频道广播 Laravel 应用,一次发送事件到多个频道很常见,目前,我们的做法是通过多个发布命令发送完全一样的负载数据到指定 Redis 服务器,这将导致不必要的数据传输,从而带来通信及性能损耗...所以,最新版本的 Laravel 优化了这个问题, RedisBroadcaster 添加一段 Lua 脚本,允许一次广播数据到多个频道: 2、更新日志 接下来,我们来大致看一下此次版本更新的详细日志...:makeFaker() 的未定义属性 修复 Str::afterLast() 方法 修复 PHP 7.3 插入浮点类型到 MySQL 数据库问题 修复通过自定义中间表属性名刷新模型问题 代码调整 ...Blade 模板移除所有缩进 MailFake::assertNothingSent() 和 MailFake::assertNothingQueued() 中新增可邮寄名称到断言消息 assertDatabaseHas

1.4K10

竟然有人质疑我还在用Laravel开发?别忘了PHP是最好的语言。

个人认为Laravel是非常优雅的开发框架:优雅的设计模式、强大的功能实现、各种方便的扩展、持续的版本更新,更主要的是迄今为止我认为最优秀的技术开发社区。 我必须Laravel打Call。...组件,Tailwind 分页视图, 时间测试助手,artisan serve 的改进,事件监听器的改进,以及各种其他错误修复和可用性改进,对 Laravel 7.x 继续进行了改善。...所有相关的生成器命令均已更新,假定模型存在于 app/Models 目录(如果存在)。如果该目录不存在,则框架将假定你的模型应放置 app 目录。...Eloquent 模型工厂 已完全重写基于类的工厂,并有完美的关联支持。例如 Laravel 的 UserFactory 是这样写的: <?.../legacy-factories 扩展包,可以 Laravel 8 中支持以前的模型工厂。

2.5K60

通过 Laravel Eloquent 模型实现简单增删改查操作

「ActiveRecord」是 ORM 的一种实现模式,Eloquent 则是 Laravel 版的「ActiveRecord」。...属性模型类指定使用哪个连接: protected $connection = 'connection_name'; 查询数据 日常开发,大部分操作都是数据库查询数据,Eloquent 模型了我们提供了很多方法帮助我们从数据库获取数据...模型类查询结果会返回 null。...如果你想要在单条记录返回结果时返回 404 响应(控制器方法可能需要用到类似操作),可以通过 firstOrFail 或者 findOrFail 方法找不到对应记录时抛出 404 异常,从而简化代码编写...同样,Eloquent我们提供了快捷的更新方法 updateOrCreate,该方法首先会根据传入参数对模型对应记录进行更新,如果发现对应记录不存在,则会将更新数据作为初始数据插入数据库,并保存(

7.9K20
领券