2015-06-21 12 views
11

Próbuję powiązać wartość domyślną z tagiem select. (w "widoku edycji").Laravel Form-Model Binding wybierz domyślne wartości

Wiem, że to powinno być łatwe, ale myślę, że czegoś brakuje.

mam:

User.php (mój model użytkownika)

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

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

UserController.php (mój kontroler)

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

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

edit.blade.php (the view)

... 
{!! 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 
           ]) !!} 
... 

Zrobiłem manekina w moim ostrzem i zdobyć poprawne wyniki:

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

ten zawiera listę wartości, które powinny być zaznaczone domyślnie ..

Próbowałem też umieścić $user->group_list jako trzeci parametr z Form::select, ale to nie działało na eterze ...

Nie mam pojęcia, co robię źle .. żadnych wskazówek na ten temat?

edit

kiedy zrobić:

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

Rzecz są prawidłowo wybrany,

teraz wiem, że muszę złapać tablicę z kolekcji .. kopać głębiej. . :)

Znaleziono go

User.php:

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

to może być łatwiejsze?

Nicea pozdrowienia,

Kristof

+0

jus FYI, można to zrobić bez konieczności deklarowania 'getGroupListAttribute()' 'w sposób User.php' – xhulio

+0

Mam w obliczu podobnego problemu, zamiast korzystania * * zerowej w 3. parametr * Form :: select * w widoku edit.blade, umieść swoje atrybuty $ user. Będzie to coś w stylu '$ user-> groups'. Zrobiłem to z rozwijanymi pojedynczymi elementami, ale musisz przetestować to z wieloma elementami. – alariva

Odpowiedz

2

nie należy umieszczać null w (3) argumentu selected defaults.

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

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

Chociaż to zadziała, jeśli to zrobisz, nie będziesz już używać wiązania modelu. –