Laravel:与观察者一起检查列是否在更新时已更改

2022-08-30 12:38:00

我正在使用观察器来观察用户是否更新。

每当用户是时,我都想检查他是否已被更改。updatedemail

这样的事情可能吗?

class UserObserver
{


    /**
     * Listen to the User created event.
     *
     * @param  \App\User  $user
     * @return void
     */
    public function updating(User $user)
    {
      // if($user->hasChangedEmailInThisUpdate()) ?
    }

}

答案 1

编辑:https://stackoverflow.com/a/54307753/2311074 的学分getOriginal

正如评论中已经说过的,该方法可以解决问题:tadmanisDirty

class UserObserver
{


    /**
     * Listen to the User updating event.
     *
     * @param  \App\User  $user
     * @return void
     */
    public function updating(User $user)
    {
      if($user->isDirty('email')){
        // email has changed
        $new_email = $user->email; 
        $old_email = $user->getOriginal('email');
      }
    }

}

如果想知道 和 之间的区别,请参阅 https://stackoverflow.com/a/49350664/2311074isDirtywasChanged


答案 2

您不必再次从数据库中获取用户。以下方法应该有效:

public function updating(User $user)
{
  if($user->isDirty('email')){
    // email has changed
    $new_email = $user->email; 
    $old_email = $user->getOriginal('email'); 
  }
}

推荐