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

时间:2019-05-26 18:50:29

标签: php laravel laravel-5 model

我已经看到有一个名为wasChanged()的函数,您可以在其中检查属性是否在更新时被更改。不是很脏,但是被更改并持续存在

但是我试图在模型事件启动功能中进行检查:

public static function boot()
{
    parent::boot();

    self::updated(function($appointment){

        if($appointment->wasChanged('appointment_date')) {
         // do something
        }

    });
}

这对我永远都行不通。有什么想法可以检查吗?

isDirty函数的行为与用于检查是否已在请求中提交属性的行为不同。

3 个答案:

答案 0 :(得分:1)

经过一番搜索,我发现有一个名为getOriginal()的有用函数,该函数返回原始属性值的数组。

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

$original_date = $appointment->getOriginal()['appointment_date'];

if($appointment->appointment_date != $original_date) {

 ...

}

Answer taken from here

答案 1 :(得分:0)

虽然这篇文章很旧,但我会插入我的答案,因为你试图解决这个问题的最初方法是最正确的方法。 在使用引导方法之前,您一定弄错了。 我一直在使用它,但我没有看到错误的原因。 下面的代码继续工作。 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));
        }
    });
}

我放了两个效果很好的形状。 如果您有类似上述的问题,则问题很可能超出了这个范围。

答案 2 :(得分:-1)

U可以检查save()方法是否返回true:

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