Laravel:如果更新时更改了列,请与观察者核实

新手上路,请多包涵

我正在使用 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()) ?
    }

}

原文由 Adam 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 423
2 个回答

编辑:感谢 https://stackoverflow.com/a/54307753/2311074 getOriginal

正如 tadman 已经在评论中所说,方法 isDirty 可以解决问题:

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

}

如果您想了解 isDirtywasChanged 之间的区别,请参阅 https://stackoverflow.com/a/49350664/2311074

原文由 Adam 发布,翻译遵循 CC BY-SA 4.0 许可协议

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

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

原文由 user1415066 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏