首页 > 解决方案 > Eloquent - 比较 save() 模型后的属性变化

问题描述

我正在我的应用程序中构建一个审计系统,我想比较一个 Eloquent Model 属性在save()方法之后的变化。这是我需要的一个例子:

$person = Person::find(1); //Original data: $person->name -> 'Original name', $person->age -> 22
$person->name = 'A new name';
$person->age = 23;
$person->save();

//At this point, I need to get an array like this (only with the attributes that have changed):
[
  'age' => ['old' => 22, 'new' => 23],
  'name' => ['old' => 'Original name', 'new' => 'A new name']
]

我知道 Eloquent 已经有一些函数,比如isDirty(),getDirty()getChanges(),但是这个方法只返回新值,我需要获取旧值和新值来存储在我的审计表中。

有什么方法可以做到这一点而无需“克隆”我的变量然后比较它以获得更改?

标签: phplaraveleloquent

解决方案


在保存模型之前,您可以访问原始(旧)属性值,例如: $person->original.

此外,您可以调用:$person->getChanges()获取所有更改的属性。


推荐阅读