ChatGPT解决这个技术问题 Extra ChatGPT

在 Eloquent 模型事件中获取先前的属性值

有没有办法在其 savingupdating 事件中查看模型属性的旧值/先前值?

例如。是否可能类似于以下内容:

User::updating(function($user)
{
    if ($user->username != $user->old->username) doSomething();
});

c
coatesap

好的,我很偶然地发现了这个,因为它目前不在文档中......

有一个可用的 getOriginal() 方法返回原始属性值的数组:

User::updating(function($user)
{
    if ($user->username != $user->getOriginal('username')) {
        doSomething();
    }

    // If you need multiple attributes you may use:
    // $originalAttributes = $user->getOriginal();
    // $originalUsername = $originalAttributes['username']; 
});

请注意,在 Laravel 7 getOriginal 之前忽略属性类型转换。


getOriginal 有一个参数,它是您要查找的字段的名称。
你知道这是返回前一个对象还是返回第一个值?
小心,它忽略了模型类型转换。
请注意,从 Laravel 7.x 开始,此方法已重命名为 getRawOriginal()。请参阅升级指南:laravel.com/docs/7.x/upgrade
@RobinvanBaalen - 我没有测试过它,但是自 Laravel 7 以来 getOriginal 的新行为实际上似乎更适合进行这些比较,因为我预计当前属性值已经应用了强制转换......
O
Ola

在 Laravel 4.0 和 4.1 中,您可以使用 isDirty() method 检查:

User::updating(function($user)
{
    if ($user->isDirty('username')){
        doSomething();
    }
});

也适用于 5.2.39。谢谢奥拉。
这没有得到以前的值
R
Rob W

您可以重载方法,然后调用父方法。


现在我们可以在 boot 方法中的 class AppServiceProvider extends ServiceProvider 中执行此操作。