我想按角色对用户进行排序,我希望用户让另一个角色消失。
控制器
$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
。
寻求帮助。
答案 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
希望这对你有用