如何知道laravel模型值是否在保存回调时发生了变化

时间:2014-04-16 11:38:01

标签: php regex laravel laravel-4

this回答之后,我在Laravel中建模保存回调(类似于rails),如下所示:

class LessonPlan extends Eloquent {

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

但是,当我保存页面或更新现有页面时,我会在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可以提交更新表格而不实际改变任何东西)..有更清洁的方法吗?

2 个答案:

答案 0 :(得分:14)

您可以使用返回isDirty()bool的{​​{1}}方法,该方法会返回包含更改值的getDirty()

array

答案 1 :(得分:0)

你试过Model::getDirty()吗?我自己没有尝试过,但它会返回自上次同步后已更改的属性。 See the API docs