Я пытаюсь заполнить выпадающее меню с результатами базы данных в Laravel 4. Я чрезвычайно новичок в Laravel. Это на самом деле мой первый сайт, и я учусь, когда я ухожу. Итак, скажите, пожалуйста, если я использую неправильную терминологию или недостаточно информации.
У меня есть база данных о компании, и мне нужно, чтобы пользователи могли выбирать компанию из выпадающего списка. Или если компании нет в базе данных, чтобы добавить ее.
Для меню выбора необходимо выполнить следующие действия:
[название компании]
И я использую этот код в своем контроллере:
$companies = RecordCompany::get(); $company_selector = array(); foreach($companies as $company) { $company_selector[$company->id] = $company->id; $company_selector[$company->company_name] = $company->company_name; } return View::make('admin.record_new', array('company_selector' => $company_selector));
И это то, что у меня есть на мой взгляд:
@if(count($client_selector)>0) {{ Form::select('company_id', $company_selector, array_values($company_selector)[0]) }} @endif
Отказ от ответственности: я нашел этот код в Интернете.
Во-первых, я не понимаю, как он будет заполнять значение и текст опции без моего объяснения, куда поместить данные.
Во-вторых, ошибка, которая возвращается, неожиданна. Когда я $company_selector
[0]
в код формы, он сообщает мне, что $company_selector
не undefined
.
Что я здесь делаю неправильно?
Чтобы заполнить выпадающее меню всеми записями из модели RecordCompany, на ваш взгляд вы можете сделать следующее:
{{ Form::select('company_id', RecordCompany::lists('company_name', 'id')) }}
Примечание. В Laravel 5
lists
методов устарели. Вместо этого используйтеpluck
.
Объяснение кода:
Form::select
создают тег select HTML. company_id
– имя тега select. lists
в любой модели (RecordCompany в этом случае) генерирует ассоциативный массив, содержащий параметры, переданные этому методу ( id
и company_name
в этом случае) всех записей в таблице базы данных модели. Если вы хотите, вы также можете вызвать метод list из контроллера, а затем передать значение в представление, например, следующее:
В контроллере
$company_lists = RecordCompany::lists('company_name', 'id'); return View::make('admin.record_new', array('company_lists' => $company_lists));
Ввиду
{{ Form::select('company_id', $company_lists) }}
Вы можете просмотреть документацию Laravel 4 для создания раскрывающегося списка здесь: http://laravel.com/docs/html#drop-down-lists
Для Laravel 5 вы можете сделать следующее:
Код контроллера
$company_lists = RecordCompany::pluck('company_name', 'id'); return View::make('admin.record_new', $company_lists);
Просмотреть код
{{ Form::select('company_id', $company_lists) }}
Я строго против использования вызовов БД в представлениях. И вот почему:
It ain't made for that!
,
Период .
Если я, где вы (обратите внимание на предложение if
), я бы хотел лучше выполнить регулярный массив, будучи ключом company->id
и любую другую информацию, которую вы можете захотеть для этого особого ключа в качестве значения. В моем коде лезвия я сделал так:
{{ Form::select('company_id', $companies) }}
Где «компании» будут массивом, переданным в качестве аргумента для представления контроллером .
Представления не сделаны, чтобы сделать консультации БД. Они предназначены для отображения данных. ПРОСТО ЭТО!
Что, как говорится:
Form::select
– это имя селектора. Тот, который вы получаете на Input::get
. Если бы я не поняла, спросите здесь! = D