php - 使用查询生成器更新时 Laravel 模型观察者类不起作用

标签 php laravel-5 eloquent laravel-query-builder

我用一个例子来解释我的问题。

我的模型类是User,观察者类是UserObserver

我在 UserObserverupdated 方法中添加了一些代码,该代码将在每次 User 模型 update 时运行使用函数。例如,只要 User 记录中发生更新,就应该调用 UserObserver(如下)中的 updated 方法。

class UserObserver{
   function updated($userModel)
   {
      //Send mail code
   }
}

UserObserver 中的代码在 User 数据更新时工作,如下所示:

User::find(2)->update(['name'=>'Update Name']);

但是,当按以下方式更新User数据时,UserObserver中的代码将不会运行:

User::where('id', 2)->update(['name'=>'Update Name']);

当我调试时,我可以理解 User::find(2) 返回 User 模型对象和 User::where('id', 2) 将返回一个 Builder 对象。那么,我如何利用我们的观察者类方法,无论它是使用 User Model 对象还是 Builder 对象更新的?

问题是,我确实有一个现有的应用程序,一些模型正在更新,例如 User::where('id', 2)->update(['name'=>'Update Name'] );。将 update 语句修改为 User::find(2)->update(['name'=>'Update Name']); 是一项艰巨的任务。

最佳答案

尝试如下:

User::where('id', 2)->first()->update(['name'=>'更新名称']);

此代码的一个问题是,如果您的数据库中没有 id = 2 的用户,那么您将得到 null 并且您将得到异常可能是在未定义的实体上调用更新。

因此您可以通过以下方式避免这种情况:

$user = User::where('id', 2)->first(); if(!empty($user)) { $user->getModel()->update(['name'=>'更新名称']); }

关于php - 使用查询生成器更新时 Laravel 模型观察者类不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35549377/

相关文章:

php - Laravel 5.6 中如何打印表格数据?

javascript - 防止 PHP 在新页面中显示结果

php - 无法写入目录 - Digital Ocean

php - SQLSTATE[HY000] [2002] 无效参数(SQL : select * from information_sch ema. 表,其中 table_schema = mamaput 和 table_name = migrations)

mysql - Eloquent hasOne和一张大表,在查询中不做限制

php - 如何将 VSCode 连接到 Docker 容器内的 xdebug 3?

php - 如果没有选择文件,则返回 false,但不起作用

laravel Eloquent ORM - 如何获取已编译的查询?

php - 如何使用 Laravel 5 和文件系统将大(视频)文件上传到 AWS S3?

mysql - Laravel Fluent 在不同的地方添加 select()s?