我有三张桌子
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')
任何人都可以帮助我理解为什么它执行两个查询而不是一个? DB是否比关系更好,因为我需要在每个请求中执行,因为我将根据角色访问页面。
答案 0 :(得分:2)
您想要选择具有他/她角色的第一个用户用户。那么用一个查询真的没办法做到这一点。
Eloquent构建器,正确地首先查询用户表以获取用户详细信息,然后连接roles
和user_role
表以获取该特定用户ID的角色详细信息。
我不知道这有多糟糕。事实上,我相信你需要2个查询来实现你想要的目标。
即使您使用数据库外观,也需要这两个查询。如果您还有其他想法,请发布您认为适合该职位的查询