Laravel Auth用户

Laravel Auth用户

问题描述:

在我的控制器中我做Laravel Auth用户

$user = Auth:user()->get(); 
dd($user); 

这是给我所有用户的列表从我的数据库。 为什么?

+0

刚刚删除' - > get();' – Onix

由于获取返回集合

Laravel Doc

只是删除的get()获取单个用户数据

$user = Auth:user(); 
dd($user); 

在这种情况下的get()方法返回用户采集对象

您可以通过以下方式验证用户数据:

$user = Auth::user(); instead of using get(); 

Your user id is: {{ $user->id }} 
    Your first name is: {{ $user->first_name }} 
    Your last name is: {{ $user->last_name }} 
+0

虽然你的问题确实解决了答案,但它也没有给出任何解释,为什么这是这种情况(在问题中特别要求) – milo526

其他答案要么解释如何解决你的问题,但不正确的原因为什么发生这种情况。

的laravel文档状态(source):

get方法返回一个Illuminate\Support\Collection包含结果,其中每个结果是PHP StdClass对象的实例。

有了完整的文档中发现here,与API参考here

从本质上讲,get函数在此返回一个集合而不是User对象。 QueryBuilder上的get方法执行select语句。

通过下面的代码片段,我们可以看到什么查询得到执行。

DB::enableQueryLog(); 
Auth::user()->get(); 
dump(DB::getQueryLog()); 

这将输出:Only get output

DB::enableQueryLog(); 
Auth::user()->where('id', 1)->get(); 
dump(DB::getQueryLog()); 

这将输出:Get with where output

第一个查询确实将输出预期的用户,第二个查询将抓住用户类从Auth::user()和选择该表中的所有行。

当我们执行第3和第4个查询,我们可以看到,我们再次先取得预期的用户,第四查询但的确也得到了用户(在这种情况下,ID为1的用户)。这也是由于where,而不是Auth::user()

我们可以从这些结果得出结论是,GET考虑到所有查询生成器功能,但不提供的类的参数。 如果您在对象上使用get,它只会考虑该对象的Class。

过于解决您的问题,其他的问题,正确的地方,你可以使用:

$user = Auth::user(); 

来获取用户。