【问题标题】:Database variables not getting updated immediately数据库变量没有立即更新
【发布时间】:2015-09-04 00:57:26
【问题描述】:

在我的 Laravel 应用程序中(我使用的是 Laravel 5.1,但这个问题也存在于 Laravel 4 中),我有一个“用户设置”页面。当用户将他们的状态从“本科”更新为“研究生”并单击“提交”时,存储此状态的变量会在数据库中更改。

然后,我的应用会将用户带到一个确认页面,说明他们的用户设置已成功更新。

但是,在该页面上,我在视图中有一个条件,它决定了接下来要显示哪些菜单。我为本科生用户准备了一组菜单,为研究生用户准备了另一组菜单:

@if(Auth::user()->status == 'graduate')
    @include('graduate_menus')
@else
    @include('undergrad_menus')
@endif 

由于某种原因,Auth::user 仍然返回它为“status”变量存储的先前值。如果我在页面上单击“刷新”,则 Auth::user 返回正确的值。

我已通过使用 Javascript 自动刷新页面一次来暂时解决此问题。但是,这是一个丑陋的黑客,我想了解我做错了什么 Auth::user 没有返回在上一页的 POST 中更新的值,以及是否有办法修复它。我想我可能不得不以某种方式刷新会话,但我不知道如何。提前致谢。

【问题讨论】:

  • 在会话中保存一个变量状态会更好。每当用户更改其状态时更新它。在您的页面中,根据会话中存储的状态变量检查用户的状态并显示正确的菜单。更好的是,现在所有页面都可以访问同一个变量,您不必每次都调用 Auth::user。
  • @mdamia 我很欣赏你的建议,但我并不完全清楚你在说什么。你能留下答案并提供一些代码吗?在我看来,您好像在说使用 Session 来存储另一个变量,但我的问题是试图绕过 Session 似乎更新速度不够快的事实。不过,我期待看到您所描述的示例。

标签: php laravel laravel-4 laravel-5 laravel-5.1


【解决方案1】:

您可能需要在更改用户对象后手动设置更新的用户,试试这个:

// Save done, you have $user
// with updated properties, so...

Auth::setUser($user);

【讨论】:

  • 感谢您的回答。它似乎正在工作。知道为什么 Laravel 不只是在 $user->save() 运行时包含运行 Auth::setUser($user) 吗?
  • 不确定,但一定有一些正当理由:-)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-07
  • 1970-01-01
  • 2017-09-24
  • 2017-05-24
  • 1970-01-01
  • 2020-10-09
相关资源
最近更新 更多