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

Laravel中如何获取多对多关联的所有用户的角色?

在Laravel中获取所有用户的全部角色(多对多关联)

首先确保你的模型与数据库关联配置正确,以下是完整实现步骤:

1. 配置模型多对多关联

在User模型中定义与Role的关联关系:

// app/Models/User.php
namespace App\Models;

use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsToMany;

class User extends Model
{
    // ...

    public function roles(): BelongsToMany
    {
        // 若中间表不是默认的`user_role`,需手动指定表名,例如:->belongsToMany(Role::class, 'user_role_table')
        return $this->belongsToMany(Role::class);
    }
}

可选的反向关联(在Role模型中定义):

// app/Models/Role.php
namespace App\Models;

use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsToMany;

class Role extends Model
{
    // ...

    public function users(): BelongsToMany
    {
        return $this->belongsToMany(User::class);
    }
}

2. 查询所有用户及其关联角色

使用预加载(with)避免N+1查询问题,高效获取数据:

$users = \App\Models\User::with('roles')->get();

3. 整理成示例表格格式

如果你需要输出如示例中「用户名为表头、角色为行」的表格,可以按以下方式处理:

后端数据整理

// 提取所有用户名称作为表头
$userNames = $users->pluck('name')->toArray();
// 提取每个用户的角色名称列表
$userRoles = $users->map(fn($user) => $user->roles->pluck('name')->toArray())->toArray();

// 补全空值保证表格行数对齐
$maxRoleCount = max(array_map('count', $userRoles));
$alignedRoles = array_map(fn($roles) => array_pad($roles, $maxRoleCount, ''), $userRoles);

// 转置数组,将「用户-角色」结构转为「行-用户角色」结构
$tableRows = array_map(null, ...$alignedRoles);

前端Blade渲染表格

<table>
    <thead>
        <tr>
            @foreach($userNames as $name)
                <th>{{ $name }}</th>
            @endforeach
        </tr>
    </thead>
    <tbody>
        @foreach($tableRows as $row)
            <tr>
                @foreach($row as $role)
                    <td>{{ $role }}</td>
                @endforeach
            </tr>
        @endforeach
    </tbody>
</table>

最终渲染效果如下:

JohnJack
role1role1
role2role3

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 18:31:25