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

Laravel关系执行多个查询

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

    我有三张桌子

    users, role, user_role 
    

    我添加了关系,但当我运行以下命令时:

    $user=User::where('id',2)
        ->with(['role'])->first();
    

    我的查询日志显示执行了两个查询:

    第一次查询:
    select * from `users` where `id` = '2' limit 1

    第二个查询:
    select `roles`.*, `user_role`.`user_id` as `pivot_user_id`, `user_role`.`role_id` as `pivot_role_id` from `roles` inner join `user_role` on `roles`.`id` = `user_role`.`role_id` where `user_role`.`user_id` in ('2')

    有人能帮我理解为什么它执行两个查询而不是一个查询吗?Is DB比relationship更好,因为我需要在每个请求中执行,因为我将根据角色访问页面。

    1 回复  |  直到 5 年前
        1
  •  2
  •   Paras    6 年前

    您要选择第一个具有其角色的用户。一个查询真的无法做到这一点。

    雄辩的生成器首先查询用户表以获取用户详细信息,然后连接 roles user_role 表以获取该特定用户ID的角色详细信息。

    我看不出这有多糟。事实上,我相信您需要两个查询来实现您想要的。

    即使使用DB facade,也需要这两个查询。如果你有其他想法,请张贴你认为适合这份工作的问题