Laravel: использовать тот же столбец, что и имя опции и ее значение в поле выбора / выпадающем списке?

#php #forms #eloquent #html-select #laravel-5.8

#php #формы #красноречивый #html-выбрать #laravel-5.8

Вопрос:

Я пытаюсь создать форму с полем выбора в Laravel.

Вид

 {{ Form::select('cmp_type', $cmp_types, null, $attributes = ['class' => 'form-control']) }}
  

Контроллер

 public function showAddCompany()
{
    $cmp_types = cmpTypes::where('status', true)->pluck('type');

    return view('addCompany', compact('cmp_types'));
}
  

Это генерирует поле выбора.

 <select class="form-control" id="cmp_type" name="cmp_type">
    <option value="0">public</option>
    <option value="1">pvt Ltd</option>
    <option value="2">LLP</option>
    <option value="3">NPO</option>
    <option value="4">partnership</option>
    <option value="5">proprietorship</option>
    <option value="6">one person</option>
</select>
  

Что я могу сделать, чтобы получить поле выбора как?:

 <select class="form-control" id="cmp_type" name="cmp_type">
    <option value="public">public</option>
    <option value="pvt Ltd">pvt Ltd</option>
    <option value="LLP">LLP</option>
    <option value="NPO">NPO</option>
    <option value="partnership">partnership</option>
    <option value="proprietorship">proprietorship</option>
    <option value="one person">one person</option>
</select>
  

Комментарии:

1. Что это за type столбец? Какого рода данные там?

Ответ №1:

Я полагаю, что происходит то, что при вызове pluck вам возвращается числовой массив (коллекция?) для value свойства используются значения и эти цифровые клавиши, а фактическое значение указанного ключа используется в качестве отображения, что, если бы вы сделали:

 $cmp_types = cmpTypes::where('status' , true )->pluck('type');
$cmp_types = array_combine($cpm_types, $cmp_types);
  

Материал для чтения

array_combine

Ответ №2:

мне помог array_combine().

решение таково:

 public function showAddCompany()
    {
        $cmp_types_obj = cmpTypes::where('status' , true )->pluck('type');
        $cmp_types = json_decode($cmp_types_obj);
        $cmp_types = array_combine($cmp_types, $cmp_types);
        return view('addCompany', compact('cmp_types'));
    }
  

мой запрос возвращает объект, поэтому я сначала преобразовал его в массив, а затем объединил его с самим собой, чтобы получить ассоциированный массив в виде

 ['public']=>'public,['private']=>'private',...
  

Комментарии:

1. Вы должны были принять другой ответ, вместо того, чтобы писать свой собственный на основе этого.