Laravel 关系执行多个查询
Laravel relationship executes multiple queries
我有三张表
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')
谁能帮我理解为什么它执行两个查询而不是一个查询?数据库是否优于关系,因为我需要在每个请求中执行,因为我将根据角色访问页面。
您想 select 具有 his/her 个角色的第一个用户用户。好吧,真的没有办法用一个查询来做到这一点。
Eloquent 构建器,正确地首先查询用户 table 以获取用户详细信息,然后连接 roles
和 user_role
tables 以获取该特定用户 ID 的角色详细信息。
我不明白这有什么不好。事实上,我相信你需要 2 个查询来实现你想要的。
即使您使用 DB facade,也需要这两个查询。如果您还有其他想法,请post您认为适合table工作的查询
我有三张表
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')
谁能帮我理解为什么它执行两个查询而不是一个查询?数据库是否优于关系,因为我需要在每个请求中执行,因为我将根据角色访问页面。
您想 select 具有 his/her 个角色的第一个用户用户。好吧,真的没有办法用一个查询来做到这一点。
Eloquent 构建器,正确地首先查询用户 table 以获取用户详细信息,然后连接 roles
和 user_role
tables 以获取该特定用户 ID 的角色详细信息。
我不明白这有什么不好。事实上,我相信你需要 2 个查询来实现你想要的。
即使您使用 DB facade,也需要这两个查询。如果您还有其他想法,请post您认为适合table工作的查询