web-dev-qa-db-fra.com

Laravel: Vérifier avec Observer si la colonne a été modifiée lors de la mise à jour

J'utilise un Observer pour voir si un utilisateur a été mis à jour.

Chaque fois qu'un utilisateur est updated, j'aimerais vérifier si sa email a été modifiée. 

Est-ce que quelque chose comme ça est possible?

class UserObserver
{


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

}
6
Adam

Comme tadman déjà dit dans les commentaires, la méthode isDirty fait l'affaire:

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');
      }
    }

}
6
Adam

Vous n'êtes pas obligé de récupérer l'utilisateur de la base de données. Ce qui suit devrait fonctionner:

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