在Eloquent模型事件中获取上一个属性值


Get previous attribute value in Eloquent model event

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

例如。以下情况可能发生吗:

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

好吧,我偶然发现了这个,因为它目前还没有在文档中。。。

有一个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会忽略属性类型转换。

在Laravel 4.0和4.1中,您可以使用isDirty()方法进行检查:

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

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