我目前有以下查询,我抓住数据库中角色为1,2,3的所有用户。我拿出他们的名字和姓氏和id仅用于选择框的唯一目的。我想要做的是使用我在whereIn中传递的ID来获取角色名称,以便我可以使用它来创建选项组。
$options = \App\User::whereHas('roles', function ($query) {
$query->whereIn('id', [1, 2, 3]);
})->get()->map(function ($user) {
$user->name = $user->first_name . ' ' . $user->last_name;
return $user;
})->pluck('name', 'id');
更新
请记住这是我的表结构。
Users Table- id, first_name, last_name
Role_User Table = role_id, user_id
Roles Table - id, name
我试图将以下内容作为示例。
<select name="assign_id">
<optgroup label="Admins">
<option value="1">John Smith</option>
<option value="2">Jane Smith</option>
</optgroup>
<optgroup label="Editors">
<option value="3">Brian Smith</option>
<option value="4">Scott Smith</option>
</optgroup>
<optgroup label="Basic Users">
<option value="3">Kevin Smith</option>
<option value="4">Tanya Smith</option>
</optgroup>
</select>
答案 0 :(得分:1)
您可以通过使用with
这样的方法来实现。
$options = \App\User::with('roles')
->whereHas('roles', function ($query) {
$query->whereIn('id', [1, 2, 3]);
})->get()->map(function ($user) {
$user->name = $user->first_name . ' ' . $user->last_name;
$user->role_name = $user->roles->first()->name;
return $user;
}) // Or to make it more usable you can use 'groupBy' on Collections
->groupBy('role_name')
->toArray();
/* The result will be like...
[
'role_1' => [
User Array 1,
User Array 2,
],
'role_2' => [
User Array 3,
],
...
]
*/
这将为您提供用户名,ID和特定用户的角色名称
答案 1 :(得分:0)
你实际上可以使用
$options = \App\User::with('roles')->whereId(array('1', '2', '3'))->pluck('name', 'id');
with
是您建立关系并希望加入该关系的时间with
之后您可以提供与已加入的表相关的条件(where
条件)
答案 2 :(得分:0)
如果您想获得每个人的角色列表,最好使用它:
在UserController.php
index
方法中添加此
$userRole = User::with('roles')->get();
return view('users.index')->withUserRole($userRole);
并在user/index.blade.php
中将此内容添加到您的内容
@foreach($userRole as $user)
<li>
{!! $user->first_name !!}
@foreach($user->roles as $role )
<ol>
{!! link_to_route('users.show', $role->role_name,[$role->id]) !!}
</ol>
@endforeach
</li>
@endforeach