Php 拉雷维尔。按用户角色、关系排序

Php 拉雷维尔。按用户角色、关系排序,php,laravel,Php,Laravel,我想按角色对用户进行排序,我希望该用户的另一个角色消失 控制器 $users = User::with(['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','

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

控制器

$users = User::with(['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->name}}</td>
        <td>{{$user->email}}</td>
        <td>
            @foreach ($user->roles as $role)
                {{$role->name}}
            @endforeach
        </td>
    </tr>
@endforeach
@foreach($users as $user)
        <tr>
            <td>{{$user->Id}}</td>
            <td>{{$user->userName}}</td>
            <td>{{$user->email}}</td>
            <td>{{$user->roleName}}</td>
        </tr>
    @endforeach
@foreach($users作为$user)
{{$user->id}
{{$user->name}
{{$user->email}
@foreach($user->roles as$role)
{{$role->name}
@endforeach
@endforeach
它不传递角色,但显示用户数据。我只需要来自
管理员
角色的用户数据。我不想显示
johndoe

Thx寻求帮助。

您可以尝试:

$users = User::User::with('roles')->whereHas('roles', function($query) {
                $query->where('name','Admin');
            }])->get();
或者您可以尝试以下流畅的方式:

控制器

$users = User::with(['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->name}}</td>
        <td>{{$user->email}}</td>
        <td>
            @foreach ($user->roles as $role)
                {{$role->name}}
            @endforeach
        </td>
    </tr>
@endforeach
@foreach($users as $user)
        <tr>
            <td>{{$user->Id}}</td>
            <td>{{$user->userName}}</td>
            <td>{{$user->email}}</td>
            <td>{{$user->roleName}}</td>
        </tr>
    @endforeach
@foreach($users作为$user)
{{$user->Id}
{{$user->userName}
{{$user->email}
{{$user->roleName}
@endforeach
您可以尝试:

$users = User::User::with('roles')->whereHas('roles', function($query) {
                $query->where('name','Admin');
            }])->get();
或者您可以尝试以下流畅的方式:

控制器

$users = User::with(['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->name}}</td>
        <td>{{$user->email}}</td>
        <td>
            @foreach ($user->roles as $role)
                {{$role->name}}
            @endforeach
        </td>
    </tr>
@endforeach
@foreach($users as $user)
        <tr>
            <td>{{$user->Id}}</td>
            <td>{{$user->userName}}</td>
            <td>{{$user->email}}</td>
            <td>{{$user->roleName}}</td>
        </tr>
    @endforeach
@foreach($users作为$user)
{{$user->Id}
{{$user->userName}
{{$user->email}
{{$user->roleName}
@endforeach
您是否尝试过:

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

            }])->get()->sortByDesc('roles.name');
您可以在

中找到sortBy或sortByDesc的解释。您是否尝试过:

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

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

您可以在

中找到sortBy或sortByDesc的解释。您可以使用where has

试试下面的方法

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

您可以使用
whereHas

试试下面的方法

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

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

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

sry,click小姐,我试一下。等等,这不是我的反对票xdsry,click小姐,我试一下。等等,不是我的反对票xdok,你的问题是()的问题,函数return all model的问题,你可以在这里看到差异ok,你的问题是()的问题,函数return all model的问题,你可以在这里看到差异