Обвързване на модел на формуляр на Laravel за много към много избран вход

Имам връзка много към много между clients и assets. За моя клиентски формуляр за редактиране имам поле за избор на множество, с което потребителят може да избере няколко assets, които да прикачи към клиент. Формулярът използва обвързване с модел, така че автоматично попълва полетата със съществуващите клиентски данни.

Свързването на модел работи за всички полета във формуляра, с изключение на множествения избор. Ето откъс от моята гледна точка:

{{ Form::model($client, ['route' => ['clients.update', $client->id], 'class' => '', 'method' => 'put']) }}

{{ Form::label('name', 'Name', $label_attributes) }}
{{ Form::text('name', null, array('class'=>'form-control')) }}

{{ Form::label('assets', 'Client Benchmarks (Select multiple)', $label_attributes) }}
{{ Form::select('assets[]', $assets, null, array('multiple' => true, 'class' => 'form-control')); }}

Когато изпратя формуляра, връзката запазва данните успешно чрез метода sync в моя контролер (метод update):

$client = Client::find($id);
$client->name = Input::get('name');    
$assets = Input::has('assets') ? Input::get('assets') : array();
$client->assets()->sync($assets);
$client->save();

Освен това, ако изведа клиентските активи директно, те са достъпни в колекцията от модели в моя изглед на формуляр:

<?php print_r($client->assets); ?>

Как мога да накарам формуляра да попълни полето за избор със съществуващите селекции?


person harryg    schedule 02.06.2014    source източник


Отговори (1)


echo Form::select('assets[]', $assets, array(1,2), array('multiple' => true));

Доколкото знам, няма да зададе всички избрани стойности по подразбиране за вас, дори когато използвате обвързване на модел на формуляр

Ето как изглежда собственият метод на formBuilder:

public function select($name, $list = array(), $selected = null, $options = array())
person Kevin Op den Kamp    schedule 02.06.2014
comment
Да, това не е идеално, тъй като би било хубаво да можете да използвате обвързването на модела за всички полета във формуляра. Изглежда, че трябва ръчно да предам избраните стойности на метода select(). - person harryg; 02.06.2014
comment
Опасявам се, че е така, съгласен съм, че няма много смисъл, но не би било трудно да се предаде масив от текущо „активни“ стойности - person Kevin Op den Kamp; 02.06.2014
comment
Наистина, въпреки че трябва да направя нещо като array_pluck($client->assets->toArray(), 'id'), което не е най-елегантното нещо. - person harryg; 02.06.2014
comment
Вместо това можете да използвате „списъците“ на laravel :) (или array_column на php) - person Kevin Op den Kamp; 02.06.2014