Laravel。我怎样才能改进这个查询

Laravel. how can i improve this query

我该如何改进这个查询 用户模型具有对角色的 id 引用 查询是在不同的控制器中完成的,然后是 Role 和 User

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

您可以使用 eloquent join 查询来做到这一点,这将 运行 只有一个数据库查询来获得结果

DB::table('users')
        ->join('role', function ($join) {
            $join->on('users.role_id', '=', 'role.id')
                 ->where('role.name', '=', 'role_name_1');
        })
        ->get();

使用 Laravel 样式你可以使用 query relationship existence,所以假设你在用户模型中设置了 role 关系,它可能是这样的:

$roleName = 'admin'; // sample role

User::whereHas('role', function($q) use ($roleName) {
  $q->where('name', $roleName);
})->get();

这将执行单个数据库查询,而您的代码将执行 2 个查询。

当然您还没有写出 "improving this query" 的真正意思,所以这只是一个例子。如果这是您需要的,您也可以像@Nuwan 回答中那样使用 join 但在他的回答中他根本不使用 Eloquent,只是查询生成器。