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 模型吗? YesAuth::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() 关系的主要内容,如果未能解决你的问题,请参考以下文章