选择选项组

时间:2016-11-03 14:28:03

标签: php laravel eloquent laravel-5.2

我目前有以下查询,我抓住数据库中角色为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>

3 个答案:

答案 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