Laravel。我该如何改善这个查询

时间:2018-08-01 12:14:24

标签: laravel laravel-5 eloquent laravel-5.5

如何改善此查询 用户模型具有角色的ID引用 查询是在与角色和用户不同的控制器中完成的

User :: where('role_id','=',Role :: where('name','=','role_name_1')-> first()-> id)-> get()

2 个答案:

答案 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();