You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Laravel Eloquent查询角色ID为12的所有用户

转换为Laravel Eloquent写法的解决方案

没问题!要把你的查询构造器代码转成Eloquent风格,关键是先给模型建立好多对多关联,然后就能用更简洁的ORM语法查询了。

第一步:设置模型关联

因为用户和角色是多对多关系,中间表是role_user,所以需要在User和Role模型里定义关联方法:

User模型(app/Models/User.php)

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class User extends Model
{
    // 定义用户与角色的多对多关联
    public function roles()
    {
        // 第二个参数是中间表名,如果遵循Laravel命名规范可以省略,但这里明确写出来更清晰
        return $this->belongsToMany(Role::class, 'role_user');
    }
}

Role模型(app/Models/Role.php)

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class Role extends Model
{
    // 定义角色与用户的多对多关联(可选,但推荐建立双向关联)
    public function users()
    {
        return $this->belongsToMany(User::class, 'role_user');
    }
}

第二步:两种Eloquent查询方式

现在你可以用以下两种方式查询所有角色ID为12的用户:

方式一:使用whereHas过滤用户

通过whereHas方法筛选出关联了指定角色的用户,这和你原来的join查询逻辑一致:

$users = User::whereHas('roles', function ($query) {
    $query->where('id', 12);
})->get();

方式二:通过Role模型直接获取关联用户

如果你先拿到了角色实例,也可以直接通过关联关系获取对应的用户列表:

// 先找到ID为12的角色
$role = Role::find(12);
// 获取该角色下的所有用户
$users = $role->users;
// 或者如果需要追加额外查询条件,用查询构造器形式:
// $users = $role->users()->where('status', 'active')->get();

这两种写法都能实现你要的需求,而且比原生查询构造器更符合Laravel的ORM设计思想,代码可读性也更高~

内容的提问来源于stack exchange,提问作者shekwo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 08:42:11