Laravel。按用户角色,关系排序

时间:2017-08-11 13:28:59

标签: php laravel

我想按角色对用户进行排序,我希望用户让另一个角色消失。

控制器

$users = User::with(['roles' => function($query) {
    $query->where('name','=','Admin');
}])->get();

查看

@foreach($users as $user)
    <tr>
        <td>{{$user->id}}</td>
        <td>{{$user->name}}</td>
        <td>{{$user->email}}</td>
        <td>
            @foreach ($user->roles as $role)
                {{$role->name}}
            @endforeach
        </td>
    </tr>
@endforeach

它不会传递角色,但会显示用户数据。我只想要Admin角色的用户数据。我不想显示John Doe

寻求帮助。

3 个答案:

答案 0 :(得分:3)

您可以使用whereHas

按关系进行过滤

尝试以下

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

答案 1 :(得分:1)

您是否尝试过:

$users = User::whereHas('roles', function($query) {
                $query->where('name','=','Admin');

            }])->get()->sortByDesc('roles.name');

您可以在https://laravel.com/docs/5.4/collections#method-sortbydesc

中找到sortBy或sortByDesc的说明

答案 2 :(得分:0)

您可以尝试:

$users = User::User::with('roles')->whereHas('roles', function($query) {
                $query->where('name','Admin');
            }])->get();

或者您可以尝试流利的方式:

<强>控制器

$users = DB::table('users')
->select('users.id as Id','users.name as userName','users.email as email','roles.name as roleName')
->join('roles','roles.user_id','=','users.id')
->where('roles.name','=','admin')
->get();

查看

@foreach($users as $user)
        <tr>
            <td>{{$user->Id}}</td>
            <td>{{$user->userName}}</td>
            <td>{{$user->email}}</td>
            <td>{{$user->roleName}}</td>
        </tr>
    @endforeach

希望这对你有用