2017-05-18 3 views
0

Ich habe UserRole Modelle in einer Viele-zu-viele-Beziehung definiert. Wenn der Benutzer die Erstellung habe ich eine mehrere Auswahlfeld auf Rollen für bestimmte Benutzer wählen:Laravel erhalten mehrere Auswahl aus Modell

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

Dies ist eine Form, die in den beiden geteilt wird Erstellen und Bearbeiten von Methoden, aber für die Bearbeitung ist es so:

{!! Form::model($patient, ['route' => ['patients.update', $patient->id], 'method' => 'PUT']) !!} 
    @include('patients.partials.form') 
{!! Form::close()!!} 

Wenn ich versuche, Benutzer mit Rollen zu bearbeiten, erhalten keine Rollen ausgewählt ... dies ist der Controller

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')); 
} 

EDIT:

Ich behandle Update wie folgt aus:

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!'); 
} 

Teil des Antrags dump:

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

Können Sie die Anfrageeingaben beim Senden des Formulars posten? und wie Sie mit dem Update umgehen. – Sandeesh

+0

Überprüfen Sie die Frage jetzt. Danke – Norgul

+0

Ihr Code scheint gut, ich sehe keine Probleme auf den ersten Blick. Können Sie "$ user-> roles" vor und nach dem Ausführen der Synchronisierung ablegen? Überprüfen Sie auch, was '$ user-> roles() -> sync ($ request-> roles);' zurückgibt. – Sandeesh

Antwort

1

Der dritte Parameter des Formulars wählen Sie das ausgewählte Array von Element nimmt. Nehmen Sie die folgenden Änderungen für Ihre ausgewählten Rollen vor, die beim Bearbeiten angezeigt werden.

// 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' 
]) !!} 
+0

Ich habe '$ selected' nicht verwendet, sondern' $ userRoles' direkt an die Ansicht weitergeleitet. Das Einzige, was mich nervte, war, dass ich 'toArray()' aufrufen musste, bevor es funktionierte. Vielen Dank – Norgul

Verwandte Themen