Laravel 怎么在模型事件中获取原始值或修改前的值?

使用 Laravel 的事件功能时,很多时候我们有这样的需求:在事件中获取模型的原始值或指定字段修改之前的值,与当前值进行对比。

使用original方法访问对象的原始属性:

class UserObserver 
{
      public function updated(User $user)
      {
            $originalData = $user->original; // 获取原始数据数组
            // 你可以在这里处理原始数据,例如记录日志或进行其他操作
            dd($originalData); // 输出原始数据,例如 email 或其他字段的原始值
      }
  }

使用 getOriginal 方法获取模型属性在最后一次保存操作之前的值

class UserObserver 
{
      public function updated(User $user)
      {
            $originalName = $user->getOriginal('name'); // 获取修改前的标题
            $currentName = $user->name;// 获取当前标题

           // 比较并处理
           if ($originalName !== $currentName) {
               // 处理逻辑
           }
      }
  }

使用 isDirty 方法与 getDirty 方法获取被修改的属性及其原始值

class UserObserver 
{
      public function updated(User $user)
      {
            // 获取所有被修改的属性及其新值
            $dirtyAttributes = $post->getDirty();
            // 判断指定属性是否被修改了
            if ($user->isDirty('age')) { //如果是更新了age字段则执行下方代码
                $user->number; //更新之后的age字段数据
                $user->getOriginal('age'); //更新之前的age字段数据
            }
      }
  }