簡體   English   中英

檢查 Laravel 5.5 模型事件中的屬性是否已更改

[英]Check if an attribute has changed in Laravel 5.5 model events

我已經看到有一個名為wasChanged()的函數,您可以在其中檢查屬性是否在更新時更改。 不是臟,而是被改變和堅持

但是我試圖在我的模型事件啟動函數中檢查這個:

public static function boot()
{
    parent::boot();

    self::updated(function($appointment){

        if($appointment->wasChanged('appointment_date')) {
         // do something
        }

    });
}

這對我永遠不起作用。 有什么想法可以檢查這個嗎?

isDirty 函數具有不同的行為,因為它用於檢查請求中是否提交了屬性。

經過一番搜索,我發現有一個名為getOriginal()的有用函數,它返回原始屬性值的數組。

所以我只需要訪問我的屬性並進行比較:

$original_date = $appointment->getOriginal()['appointment_date'];

if($appointment->appointment_date != $original_date) {

 ...

}

從這里獲取的答案

盡管這篇文章很舊,但我會插入我的答案,因為您嘗試解決此問題的最初方法是最正確的方法。 在使用引導方法之前,您一定弄錯了。 我一直在使用它,但我沒有看到錯誤的原因。 下面的代碼繼續工作。 並且剛剛在 2021 年完成了對 laravel 5、7 和 8 的測試。

protected static function boot()
{
    parent::boot();

    self::updated(function ($user) {
        if($user->wasChanged('password')){
            $user->notify(new PasswordChanged($user));
        }
    });
}

下面的代碼在 2021 年更新和測試,非常適合 laravel 7 和 8。

protected static function booted()
{
    self::updated(function ($user) {
        if($user->wasChanged('password')){
            $user->notify(new PasswordChanged($user));
        }
    });
}

我把效果很好的兩個形狀。 如果你有類似上面的問題,那么問題很可能超出了這個范圍。

你可以檢查 save() 方法是否返回 true:

$object = new Model;
$object->attribute = $value;
if($object->save(){
 // attribute changed
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM