php - 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()
,但是这个方法只返回新值,我需要获取旧值和新值来存储在我的审计表中。
有什么方法可以做到这一点而无需“克隆”我的变量然后比较它以获得更改?
解决方案
在保存模型之前,您可以访问原始(旧)属性值,例如:
$person->original
.
此外,您可以调用:$person->getChanges()
获取所有更改的属性。
推荐阅读
- tableau-api - 在 Tableau 中连接来自 2 个字符串维度的数据
- reporting-services - SSRS:将计算的行放在另一行下方
- javascript - 您如何确定 gatsbyjs 中页面之间的父子关系?
- kubernetes - kubernetes pod 动态命令行
- php - 在数组中搜索多个序列
- haskell - 为数据构造函数提供列表中的元素
- php - WooCommerce:根据购物车中的数量更改运输类别
- sql - 如果满足条件,则计数不同
- python - Python HTTP GET 在 300 秒后从 Docker 容器引发异常
- openlayers-3 - 仅选择要素的特定多边形,OpenLayers