2017-08-17 3 views
2

Ich habe ein Problem. Ich habe das Dropdown-Formular hinzugefügt, aber Er zeigt nur die Liste an. Wenn ich auf "Senden" klicke, ändert sich meine Datenbank nicht. Form::text ändern Sie meine Datenbank, aber Form::select macht keine Änderungen. Kann ich ein Problem in der Steuerung haben?Laravel 5. Dropdown ändert nicht die Datenbank

-Controller

public function edit($id) 
{ 
    $user = User::with('roles')->findOrFail($id); 
    $userRole = Role::pluck('name', 'id'); 
    return view('pages.edit', compact('user', 'userRole')); 
} 

public function update($id, Request $request) 
{ 
    $user = User::with('roles')->findOrFail($id); 
    $user->update($request->all()); 
    return redirect('users'); 
} 

Ansicht

{!! Form::model($user, ['method' => 'PATCH', 'action'=>['[email protected]', $user->id]]) !!} 
<div class="form-group"> 
    <div class="form-group col-md-offset-3 col-md-6"> 
    {!! Form::label('roles','Roles: ') !!} 
    {!! Form::select('roles',$userRole, null,['class'=>'form-control']) !!} 
    </div> 

    <div class="form-group col-md-offset-3 col-md-6"> 
     {!! Form::submit('Send', ['class'=>'btn btn-success form-control']) !!} 
    </div> 
</div> 
{!! Form::close() !!} 

Hat Rolle

public function roles() 
    { 
     return $this->belongsToMany(Role::class); 
    } 

    public function assignRole($role) 
    { 
     return $this->roles()->save(
      Role::whereName($role)->firstOrFail() 
     ); 
    } 

Thx für die Hilfe.

+0

Ich denke, 'Rollen' ist eine Beziehung in Ihrem Modell? Sie müssen eine separate Abfrage verwenden, um diese Beziehung zu erstellen. Bitte zeigen Sie Ihr 'User'- und' Role'-Modell. – Jerodev

+0

Setzen Sie 'print_r ($ request-> all()); exit();' in Ihr 'update()' und lassen Sie mich die Ausgabe wissen. –

+0

@Jerodev I aktualisiert Post – funfelfonfafis

Antwort

1

Da Rollen eine Beziehung ist, müssen Sie die Rollen an Ihren Benutzer anhängen oder zuordnen. Abhängig von der Art der Beziehung.

Sie das role_id Ihrem Benutzermodell anhängen haben, fügen Sie diese in Ihrem Controller:

$user->roles()->attach($request->roles); 
$user->save(); 

Wie in den Kommentaren erwähnt, sind die Tasten auf der Dropdown-Felder die IDs der Rollen.

PS: Dies sind die Grundlagen von Laravel eloquent, so würde ich empfehlen, die Dokumentation zuerst zu lesen. https://laravel.com/docs/5.4/eloquent-relationships

+0

Ich habe es vorher versucht, aber habe das Ergebnis: _Keine Abfrageergebnisse für Modell [App \ Role] ._ – funfelfonfafis

+0

Das bedeutet, dass egal welche Rolle-Name Sie einfügen in AssingRole() doenst existieren in der Datenbank. Was bekommst du, wenn du es tust: dd ($ request-> all()) in deinem Controller. – Christophvh

+0

'Array: 5 [▼ "_method"=> "PATCH" "_token"=> "sbsSGt9lkR12WlG2MRuYKt627JE6Hy7ZX9IAGCjb" "name"=> "BOT2" "email"=>„BOT2 @ bietet.com " " roles "=>" 1 " ]' – funfelfonfafis

Verwandte Themen