Заполнение выпадающего меню с результатами базы данных в Laravel 4

Я пытаюсь заполнить выпадающее меню с результатами базы данных в 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 .

Объяснение кода:

  1. Методы Form::select создают тег select HTML.
  2. company_id – имя тега select.
  3. Второй параметр – это опции для тега 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 .
  • Второй аргумент – это список для выполнения атрибута select (мы уже говорили об этом там!)
  • И третий , не менее важный, – это то, где вы говорите, какой из них выбран на странице загрузки (используется для изданий). Вы должны ссылаться на идентификатор (идентификатор компании, в этом случае). Это по выбору, по понятным причинам.

Если бы я не поняла, спросите здесь! = D