gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 02:10:59 26 4
gpt4 key购买 nike

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

我的模型类是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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com