为了账号安全,请及时绑定邮箱和手机立即绑定

Eloquent - 比较 save() 模型后的属性变化

Eloquent - 比较 save() 模型后的属性变化

PHP
慕雪6442864 2023-09-22 16:40:04
我正在我的应用程序中构建一个审核系统,并且我想比较save()方法后 Eloquent 模型属性的变化。这是我需要的示例:$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(),但是这个方法只返回新值,我需要将旧值和新值存储在我的审计表中。有没有什么方法可以做到这一点,而不需要“克隆”我的变量,然后比较它以获取更改?
查看完整描述

4 回答

?
叮当猫咪

TA贡献1776条经验 获得超12个赞

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

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


查看完整回答
反对 回复 2023-09-22
?
慕哥6287543

TA贡献1831条经验 获得超10个赞

在Save()函数之前以及覆盖第 2 行和第 3 行的变量之前,您可以通过执行以下操作获取旧数据:


$oldName = $person->name;

$oldAge = $person->age;

然后,保存后,您可以将值插入数组中,如下所示:


$values = array(

"oldName" => $oldName,

"newName" => "New Name",

"oldAge" => $oldAge,

"newAge" => "New Age",

);

因此,您可以通过执行以下操作从数组中获取值:


echo $values["oldName"];

echo $values["newAge"];

...


查看完整回答
反对 回复 2023-09-22
?
手掌心

TA贡献1942条经验 获得超3个赞

您可以在进行更改之前克隆新检索的模型。沿着线的东西


$person = Person::find(1); 

$original_person = cone $person;


// update the person object

// ...

$person->save();

您可以像这样继续构建数组:


[

  'age' => ['old' => $original_person->age, 'new' => $person->age],

  'name' => ['old' => $original_person->name, 'new' => $person->name]

]


查看完整回答
反对 回复 2023-09-22
?
白衣染霜花

TA贡献1796条经验 获得超10个赞

您可以在模型类中的 Updated() 启动函数中执行此操作


class Mymodel extends Model

{

    public static function boot()

    {

        parent::boot();


        self::updated(function ($model) {

            var_dump($model->original);

            var_dump($model->getChanges());

            // Traverse the changed array and save with original values

        });

    }

}


查看完整回答
反对 回复 2023-09-22
  • 4 回答
  • 0 关注
  • 86 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信