Laravel我通过在控制器中多次调用Auth :: user()来执行多个查询

时间:2018-07-24 13:12:49

标签: laravel eloquent

在我的控制器中,我这样登录的用户 id 用户名

$userId = Auth::user()->id;
$username = Auth::user()->user_name;

但是上面的代码会产生两个查询吗? 我不了解Auth::user()在幕后的工作方式

3 个答案:

答案 0 :(得分:2)

如果您的代码生成2个查询,则将用户保存到另一个变量中。 像这样:

$user = Auth:user();
$userId = $user->id;
$username = $user->user_name;

Laravel不会在会话中存储所有用户,它仅存储用户ID。当调用user()函数时,laravel将从具有保存用户ID的数据库中获取用户。

答案 1 :(得分:2)

Auth :: user()从users表返回包含您的用户数据的对象。

因此,如果只需要一个查询,请使用:

$user = Auth::user();
echo $user->user_name;

在“验证”部分查看官方文档。

在调用Auth方法之前,请确保您的用户已登录:

if (Auth::check()) {
// User logged
}

答案 2 :(得分:0)

如果要减少数据库查询,请按以下方式获取经过身份验证的用户

 $user = Auth::user():
 $id = $user->id;
 $name = $user->name;
 dd($user);

在laravel Auth::user()中,拥有当前经过身份验证的用户的所有数据。