Laravel Auth::user() 关系

Posted

技术标签:

【中文标题】Laravel Auth::user() 关系【英文标题】:Laravel Auth::user() relationships 【发布时间】: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() 返回用户模型的雄辩实例(当找到时)。 【参考方案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 而不是模型解决了我的问题。

【讨论】:

以上是关于Laravel Auth::user() 关系的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 5.3 Eloquent 关系 - 用户、角色、页面和权限

在 Laravel 中覆盖关系

Laravel 5.1 - 关系方法必须返回一个类型的对象

检查laravel中的朋友

Laravel 修改 Auth::user() 查询?

laravel `Auth:user()` 或 `Auth:id()` 是如何工作的