检查Laravel 5.5模型事件中的属性是否已更改



我已经看到有一个称为 wasChanged()的函数,您可以在更新上检查属性是否更改。不是肮脏的,但已更改并持续

但是,我正在尝试在模型事件引导功能中检查此内容:

public static function boot()
{
    parent::boot();
    self::updated(function($appointment){
        if($appointment->wasChanged('appointment_date')) {
         // do something
        }
    });
}

这对我永远不起作用。有什么想法我可以检查一下吗?

ISDIRTY功能具有不同的行为,因为它用于检查请求中是否提交了属性。

尽管这篇文章是旧的,但我会插入答案,因为您尝试解决此问题的初始方法是最正确的方法。在使用启动方法之前,您必须弄错了。我不断使用它,但看不到错误的原因。以下代码继续工作。刚刚在2021年完成了Laravel 5、7和8的测试。

protected static function boot()
{
    parent::boot();
    self::updated(function ($user) {
        if($user->wasChanged('password')){
            $user->notify(new PasswordChanged($user));
        }
    });
}

下面的代码在2021年进行了更新和测试,并适用于Laravel 7和8。

protected static function booted()
{
    self::updated(function ($user) {
        if($user->wasChanged('password')){
            $user->notify(new PasswordChanged($user));
        }
    });
}

我将两个形状效果很好。如果您的问题与上述类似,那么问题可能超出了此范围。

进行了一些搜索后,我发现有一个称为 getOriginal()的有用函数,该功能返回原始属性值的数组。

所以我只需要访问我的属性并进行比较:

$original_date = $appointment->getOriginal()['appointment_date'];
if($appointment->appointment_date != $original_date) {
 ...
}

从此处获取的答案

u可以检查save((方法返回true:

$object = new Model;
$object->attribute = $value;
if($object->save(){
 // attribute changed
}

最新更新