Laravel:如果在更新时更改了列,请使用Observer进行检查

Ada*_*dam 12 php mysql laravel-5

我正在使用Observer来监视用户是否已更新.

每当用户,updated我想检查他email是否已被更改.

这样的事情可能吗?

class UserObserver
{


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

}
Run Code Online (Sandbox Code Playgroud)

Ada*_*dam 16

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

class UserObserver
{


    /**
     * Listen to the User created 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');
      }
    }

}
Run Code Online (Sandbox Code Playgroud)


use*_*066 12

您不必再次从数据库中获取用户。以下应该工作:

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

  • @aowie1 在我发表评论后,该答案已更新:'( (2认同)