Получение выбранных значений из формы множественного выбора в Laravel
Для создания раскрывающегося списка с элементом, выбранным по умолчанию, выполняется следующее:
echo Form::select('size', array('L' => 'Large', 'M' => 'Medium', 'S' => 'Small'), 'S');
Итак, я создал раскрывающийся список, который по умолчанию имеет более одного элемента, следующим образом:
echo Form::select('size', array('L' => 'Large', 'M' => 'Medium', 'S' => 'Small'), array('S', 'M'), array('multiple'));
Но как мне получить более одного выбранного значения?
Input::get('size')
возвращает только последнюю выбранную строку.
Ответы
Ответ 1
Во-первых, если вы хотите, чтобы по умолчанию был выбран несколько элементов, вам нужно указать массив значений как 3-й параметр, а не простое значение.
Exemple:
Form::select('size', array('L' => 'Large', 'M' => 'Medium', 'S' => 'Small'), array('S', 'M'), array('multiple'));
должен отображать выбор с выбранными S и M.
Во второй точке вы должны попытаться указать имя как size[]
вместо size
, это может решить проблему (потому что ваш опубликованный выбор не является простым значением, его массив значений)
Ответ 2
Операторы обычного выбора go
<select name="select_name" id="select_name" multiple="multiple">
И рабочий процесс заключается в том, что Laravel получает элементы формы по их имени.
Чтобы заставить его работать, измените имя на массив.
<select name="select_name[]" id="select_name" multiple="multiple">
Это приведет к тому, что laravel получит значения select в качестве массива данных.
Ответ 3
Согласно https://laravelcollective.com/docs/5.2/html#drop-down-lists
Form::select('size[]',['L' => 'Large', 'M' => 'Medium', 'S' => 'Small'], ['S', 'M'], ['multiple' => 'multiple', 'class' => 'form-control']);
Кстати, обратите внимание на название выпадающего списка (размер []), если вы хотите использовать это поле в качестве массива в своем сервере.
Все становится сложным, если вы хотите использовать отношения как значение, например
models
user => common fields
size => id, name, slug [
{id : 1 , name : Large, slug : L},
{id : 2 , name : Small, slug : S},
{id : 3 , name : Medium, slug : M}
]
user_size => id, user_id, size_id [
{id :1, user_id:1, size_id:1}
{id :2, user_id:1, size_id:3}
]
Итак, $user->colors
вернет что-то вроде
laravel collection
[
USER_SIZE => [ 'user_id' => 1 , size_id' => 1 ],
USER_SIZE => [ 'user_id' => 1, 'size_id' => 3 ]
]
Вы могли бы сделать что-то вроде, помните, что User Model
имеет отношение sizes
от одного к другому с SIZE Model
Form::select('size[]',['L' => 'Large', 'M' => 'Medium', 'S' => 'Small'], $user->sizes->pluck('size')->pluck('slug')->toArray(), ['multiple' => 'multiple', 'class' => 'form-control']);
Надеюсь, что это поможет