2015-06-21 14 views
11

Sto tentando di associare un valore predefinito a un tag select. (in una "modifica vista").Laravel Form-Model Binding multi select default values ​​

So che questo dovrebbe essere facile, ma penso che mi manchi qualcosa.

ho:

User.php (il mio modello di utente)

... 
    public function groups() 
{ 
    return $this->belongsToMany('App\Group'); 
} 

public function getGroupListAttribute() 
{ 
    return $this->groups->lists('id'); 
} 
... 

UserController.php (il mio controller)

... 
public function edit(User $user) 
{ 
    $groups = Group::lists('name', 'id'); 

    return view('users.admin.edit', compact('user', 'groups')); 
} 
... 

edit.blade.php (la vista)

... 
{!! Form::model($user, ['method' => 'PATCH', 'action' => ['[email protected]', $user->id]]) !!} 
... 

... 
// the form should be binded by the attribute 'group_list' created 
// at the second block of 'User.php' 
// performing a $user->group_list gets me the correct values 
{!! Form::select('group_list[]', $groups, null, [ 
           'class' => 'form-control', 
           'id' => 'grouplist', 
           'multiple' => true 
           ]) !!} 
... 

ho fatto un test manichino in mia lama, e hanno ottenuto i risultati corretti:

@foreach ($user->group_list as $item) 
    {{ $item }} 
@endforeach 

Questo elenca i valori che dovrebbero essere selezionati per default ..

Ho anche provato a mettere $user->group_list come terzo parametro dal Form::select, ma questo non ha funzionato l'etere ...

Non ho idea di cosa sto facendo male .. qualche suggerimento su questo?

modificare

quando lo faccio:

public function getGroupListAttribute() 
{ 
    //return $this->groups->lists('id'); 
    return [1,5]; 
} 

La voce siano correttamente selezionati,

ora so di avere per afferrare una matrice dalla collezione .. scavare più in profondità. . :)

trovato

User.php:

... 
public function getGroupListAttribute() 
{ 
    return $this->groups->lists('id')->toArray(); 
} 
... 

Potrebbe essere più facile?

Nizza saluti,

Kristof

+0

jus cronaca, è possibile farlo senza dover dichiarare il() metodo 'getGroupListAttribute in' User.php' – xhulio

+0

Ho affrontato un problema simile, invece di utilizzare * nulla * nel 3 ° parametro * Forma :: seleziona * nella tua vista edit.blade, inserisci i tuoi attributi utente $. Sarebbe qualcosa come '$ user-> groups'. Ho fatto questo con dropdown di singoli elementi, ma devi testarlo con più elementi. – alariva

risposta

2

Non si dovrebbe mettere null nella (3 °) tesi selected defaults.

{!! Form::model($user, ['route' => ['user.update', $user->id]]) !!} 

{!! Form::select(
     'group_list[]', 
     $groups, 
     $user->group_list, 
     ['multiple' => true] 
    ) 
!!} 
+0

Mentre funziona, se si esegue questa operazione non si utilizza più l'associazione del modello. –

Problemi correlati