Привязка модели формы 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