【问题标题】:Laravel Auth::user() relationshipsLaravel Auth::user() 关系
【发布时间】:2015-05-13 12:01:22
【问题描述】:

我正在尝试通过 Auth::user() 函数获取我的用户角色关系。我以前做过,但由于某种原因它不起作用。

Auth::user()->role

这会返回试图从非对象获取属性的错误。

在我的用户模型中,我有这个:

public function role()
{
    return $this->belongsTo('vendor\package\Models\Role');
}

在我的榜样中,我有:

public function user()
    {
        return $this->hasMany('vendor\package\Models\User');
    }

当我这样做时,它会返回我的角色名称,所以我认为我的关系是正确的:

User::whereEmail('test@test.be')->first()->role->name

我错过了什么?

【问题讨论】:

  • 你确定 Auth::user() 返回一个 Eloquent 模型吗?
  • Yes Auth::user() 返回用户模型的雄辩实例(当找到时)。

标签: php authentication laravel eloquent


【解决方案1】:

Auth::user 可以在没有用户登录时返回非对象。您可以使用Auth::check() 来防止这种情况,甚至可以使用Auth::user 本身:

if(!($user = Auth::user())) {
    // No user logged in
} else {
    $role = $user->role;
}

或者:

if(Auth::check()) {
    $role = Auth::user()->role;
}

【讨论】:

  • 或者干脆依赖中间件!并且不需要检查。 L5 附带一个。 app/Http/middleware/Authenticate.php并在app/Http/kernel.php中注册为“auth”。
  • 这是正确的,而且很重要。不过,OP 没有说明他使用的是哪个版本的 Laravel,所以我假设是 Laravel 4。
  • 我假设 L5 :) 但无论如何,如果 L4 有过滤器。
  • 就我们所知,这段代码在过滤器中运行,OP 在他的问题中没有区别。
  • 对不起,我不够清楚,我用于这个项目的 Laravel 版本是 4.2,我试图运行的代码位于过滤器“角色”中。这个过滤器是在身份验证过滤器之后执行,因此我的用户肯定已登录到我的应用程序。 Auth::user() 顺便返回我的用户。
【解决方案2】:

好的,我发现它为什么不适合我。 问题是我所说的用户模型是我的包的一部分,因为 Laravel 在默认的 Laravel 安装中有它自己的用户模型,所以它不起作用。

您的包模型不会覆盖现有模型。我通过为我的包制作 Trait 而不是模型解决了我的问题。

【讨论】:

    猜你喜欢
    • 2018-12-17
    • 1970-01-01
    • 2020-09-05
    • 1970-01-01
    • 2018-09-13
    • 2023-02-04
    • 2017-03-29
    • 2020-07-16
    • 2023-04-04
    相关资源
    最近更新 更多