簡體   English   中英

如何知道laravel模型值是否在保存回調時發生了變化

[英]how to know if laravel model values changed on save callback

按照這個答案,我在Laravel中模擬保存回調(類似於rails),如下所示:

class LessonPlan extends Eloquent {

   public function save(array $options = array())
   {
      // before save code 
      parent::save();
      // after save code
   }
}

但是,當我保存頁面或更新現有 Page時,我在Page上調用save()。 我怎么知道這個操作中哪個是哪個?

我試過類似的東西

public function save(array $options = array())
{
    // before save code
    $oldLesson = clone $this;
    parent::save();

    ..
    if ($this->isLessonStatusChanged($oldLesson)) {
      ..
    }
}

private function isLessonStatusChanged($oldLesson) {
    return $this->status != $oldLesson->status;
}

但這並不好......因為$ oldLesson已經有了$ lesson的新值

我最后做的只是重新編寫網址,看看它是否是更新請求..但我已經在晚上睡覺時遇到問題(我的回答並沒有真正告訴我是否有任何值實際發生了變化.. b / c one可以提交更新表格,而無需實際更改任何內容)..有更清潔的方法嗎?

您可以使用返回boolisDirty()方法和返回具有更改值的array getDirty()

public function save(array $options = array())
{
    $changed = $this->isDirty() ? $this->getDirty() : false;

    // before save code
     parent::save();

    // Do stuff here
    if($changed)
    {
        foreach($changed as $attr)
        {
            // My logic
        }
    }

}

你試過Model::getDirty()嗎? 我自己沒有嘗試過,但它返回自上次同步以來已更改的屬性。 請參閱API文檔

暫無
暫無

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

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