我们都知道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();
}