代码之家  ›  专栏  ›  技术社区  ›  Kiow

我在控制器中多次调用auth::user()来执行多个查询吗?

  •  0
  • Kiow  · 技术社区  · 6 年前

    在我的控制器中,我得到登录用户 身份证件 用户名 这样地:

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

    但是上面的代码会产生两个查询吗? 我不明白怎么做 Auth::user() 幕后工作

    3 回复  |  直到 6 年前
        1
  •  2
  •   Ts8060    6 年前

    如果代码生成2个查询,请将用户保存在另一个变量中。 这样地:

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

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

        2
  •  2
  •   Arnaud LiDz    6 年前

    auth::user()返回一个对象,其中包含用户表中的用户数据。

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

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

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

    请确保在调用auth方法之前记录了您的用户:

    if (Auth::check()) {
    // User logged
    }
    
        3
  •  0
  •   Hamed Yarandi    6 年前

    如果要减少数据库查询,请获取 已验证用户 这样地:

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

    拉拉维尔 Auth::user() 拥有当前已验证用户的所有数据。