Laravel Auth::user()关联关系

3
我正在尝试通过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 模型吗? - fadeys.work
是的,Auth::user() 返回 User 模型的 Eloquent 实例(如果找到)。 - Kyslik
2个回答

4

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”。 - Kyslik
没错,这是个很好的观点。不过,OP 没有说明他使用的是哪个版本的 Laravel,因此我假设他使用的是 Laravel 4 版本。 - Jeff Lambert
1
我假设是L5 :) 但无论如何如果是L4,也有相应的过滤器。 - Kyslik
就我们所知,这段代码可能正在过滤器内运行,OP在他的问题中没有进行任何区分。 - Jeff Lambert
@JorenVanHocht 如果你把它分开,会发生同样的事情吗?即 $user = Auth::user(); $role = $user->role 或者如果你用查询构建器呢? $user = Auth::user(); $role = $user->role()->first()`? (不好意思,我之前的评论漏掉了) - Jeff Lambert
显示剩余2条评论

-1

好的,我找到了为什么它对我不起作用的原因。 问题在于我谈论的用户模型是我的包的一部分,因为Laravel在默认安装中有自己的用户模型,所以它无法工作。

您的包模型不会覆盖已经存在的模型。我通过为我的包制作Trait而不是模型来解决了我的问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接