如何改善此查询 用户模型具有角色的ID引用 查询是在与角色和用户不同的控制器中完成的
User :: where('role_id','=',Role :: where('name','=','role_name_1')-> first()-> id)-> get()
答案 0 :(得分:1)
使用Laravel样式,您可以使用query relationship existence,因此假设您在用户模型中设置了role
关系,则可能是这样的:
$roleName = 'admin'; // sample role
User::whereHas('role', function($q) use ($roleName) {
$q->where('name', $roleName);
})->get();
这将执行单个数据库查询,而您的代码将执行2个查询。
当然,您还没有写出“改善此查询”的真正含义,所以这只是一个例子。如果您需要的话,也可以在@Nuwan答案中使用join
,但在他的答案中他根本不使用Eloquent,而只是使用查询生成器。
答案 1 :(得分:0)
您可以使用雄辩的join
查询来执行此查询,该查询将仅运行一个数据库查询以获取结果
DB::table('users')
->join('role', function ($join) {
$join->on('users.role_id', '=', 'role.id')
->where('role.name', '=', 'role_name_1');
})
->get();