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,只是查询生成器。
我该如何改进这个查询 用户模型具有对角色的 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,只是查询生成器。