Laravel模型事件-对特定的列更新执行操作


Laravel Model Events - perform actions on specific column update

我们都知道Laravel有在特定实例上触发的模型事件,我们可以对它们执行操作,如创建,创建,保存,保存等。我想知道的是,我们如何知道哪个列被更新了,比如说'saved'事件,比如用户被更新了,当然,保存和保存的事件被触发了,在这些事件中,人们可以知道哪个列被更新了,并相应地执行操作吗?

正如@Joel Hinz所说,你可以使用getDirty()方法。

getDirty() -获取自上次同步以来已更改的属性

这个方法将返回一个包含更改列名称的数组:

public function boot()
{
    User::saving(function ($user) {
        $columns = $user->getDirty();
        foreach ($columns as $column => $newValue) {
            echo $column; // One of the changed columns.
        }
    });
}

老问题,但我发现了,我有一个更好的解决方案。

使用$model->wasChanged('FIELD_NAME')

如果字段在上次保存时被更改,将返回true/false。

如果您将此与引导方法结合使用:

public static function boot()
    {
        /*
        static::creating(function ($model) {
            Log::emergency('creating');
        });
        static::updating(function ($model) {
            Log::emergency('updating');
        });
        static::deleting(function ($model) {
            Log::emergency('deleting');
        });
        */
        static::updated(static function ($model) {
            if ($model->wasChanged('FIELD_NAME')) {
              // YOUR CODE
            }
        });
        parent::boot();
    }