Php Laravel从模型中返回多个选择

Php Laravel从模型中返回多个选择,php,laravel,Php,Laravel,我在多对多关系中定义了用户角色模型。创建用户时,我有一个多选择框来选择特定用户的角色: <div class="col-lg-6 col-md-6 col-sm-6 col-xs-6"> <div class="form-group"> <label for="roles">Roles</label> {!! Form::select('roles[]',$roles, null,['class' =>

我在多对多关系中定义了用户角色模型。创建用户时,我有一个多选择框来选择特定用户的角色:

<div class="col-lg-6 col-md-6 col-sm-6 col-xs-6">
    <div class="form-group">
        <label for="roles">Roles</label>
        {!! Form::select('roles[]',$roles, null,['class' => 'form-control selectpicker','multiple' => 'true']) !!}
    </div>
</div>
当我尝试编辑具有角色的用户时,未选择任何角色…这是控制器

public function edit(User $user)
{
    $clinics = Clinic::pluck('name', 'id');
    $roles = Role::pluck('display_name', 'id');
    $states = State::pluck('name', 'id');
    $cities = City::pluck('name', 'id');
    return view('users.edit', compact('user', 'clinics', 'states', 'cities', 'roles'));
}
编辑:

我像这样处理更新:

{!! Form::model($patient, ['route' => ['patients.update', $patient->id], 'method' => 'PUT']) !!}
    @include('patients.partials.form')
{!! Form::close()!!}
public function update(Request $request, User $user)
{
    if ($request->has('password'))
        $user->update($request->except('password_confirmation'));
    else
        $user->update($request->except('password', 'password_confirmation'));

    $user->roles()->sync($request->roles);
    return redirect('users')->with('status', 'User Updated!');
}
请求转储的一部分:

"roles": [
    "1",
    "4"
],
"first_name": "xy",
"last_name": "yx",

表单select的第三个参数采用所选的项数组。对所选角色进行以下更改,以便在编辑时显示

// Pass the current user roles
public function edit(User $user)
{
    $userRoles = $user->roles->pluck('id');
    $clinics = Clinic::pluck('name', 'id');
    $roles = Role::pluck('display_name', 'id');
    $states = State::pluck('name', 'id');
    $cities = City::pluck('name', 'id');
    return view('users.edit', compact('user', 'userRoles', 'clinics', 'states', 'cities', 'roles'));
}

// Pass the selected list of roles 
{!! Form::model($patient, ['route' => ['patients.update', $patient->id], 'method' => 'PUT']) !!}
    @include('patients.partials.form', ['selected' => $userRoles])
{!! Form::close()!!}

// Check if a selected value is given and use it. This makes it reusable with create and edit.
{!! Form::select('roles[]', $roles, isset($selected) ? $selected : null, [
    'class' => 'form-control selectpicker',
    'multiple' => 'true'
]) !!}

你能在提交表单时发布请求输入吗?以及如何处理更新。现在检查问题。谢谢你的代码看起来不错,我一眼就看不到任何问题。您能否在运行同步之前和之后转储$user->roles?同时检查$user->roles->sync$request->roles;返回。也许你没有得到我…角色存储良好,这不是问题。问题是,在表单中检索模型时,我并没有看到它们被选中……但它们在dbalright中,明白了。我发布了答案。我没有使用$selected,而是将$userRoles直接转发到视图。唯一困扰我的是,我必须在它起作用之前打电话给toArray。谢谢