亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

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 關注
  • 122 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號