Создание выпадающего списка со значениями из таблицы DB

Я пытаюсь создать раскрывающийся список со значениями из таблицы MySQL, используя Laravel. Таблица проста, два столбца – id и category .

Следующие будут извлекать все записи (категории), но возвращают объект, а не массив, что мне нужно для выпадающего кода –

 $categories = Category::all(); 

Код для раскрывающегося списка:

 {{ Form::select('category', $categories, $post->category_id) }} 

Идеи?

ОБНОВИТЬ

bgallagh3r предложил использовать цикл foreach для преобразования каждой категории в массив. Их код заставил меня закрыть, но создал кучу фанковых вложенных тегов optgroup . Я смог довести его до одной группы optgroup но это слишком много.

 $categories = Category::all(); foreach ($categories as $cat) { $category = $cat->to_array(); $id = $category['id']; $value = $category['category']; $cats[] = array($id => $value); } 

И тогда, в форме:

 {{ Form::select('categories', $categories)}} 

Я в конечном итоге с этим HTML:

  <select name="categories"> <optgroup label="0"> <option value="1">Department News</option> </optgroup> <optgroup label="1"> <option value="2">General</option> </optgroup> ... </select> 

Вы можете попробовать функцию «списки»:

$categories = Category::lists('category', 'id');

(Только для Laravel 3) Или даже не указывать параметр 'id', поскольку он будет по умолчанию для ключа модели, см. http://laravel.com/api/source-class-Laravel.Database.Query.html#596

$categories = Category::lists('category');

(Для Laravel 4 вам нужен второй параметр, см. http://laravel.com/api/source-class-Illuminate.Database.Query.Builder.html#1034-1063 )

В зависимости от того, используете ли вы Eloquent для своих моделей, Category вернет массив объектов, вам необходимо преобразовать объекты в массивы, прежде чем передавать их в класс Form.

 foreach (Category::all() as $cat) { $categories[] = array($cat->id => $cat->category); } {{ Form::select('categories', $categories)}} 

В Laravel 4 вы можете легко попробовать следующее:

 //Query category and pass it to the view that you want to show your category $category = Category::lists('category_name', 'category_id'); 

На ваш взгляд просто добавьте {{ Form::select('category', $category) }} . Результат будет тем, что вы хотите, например, следующим

 <select name="category"> <option value="category_id">category_name</option> </select> 

Как насчет этого ?

 foreach (Category::all() as $cat) { $categories[$cat->id] = $cat->category; } {{ Form::select('categories', $categories)}} 

Просто немного подкорректировать код bgallagh3r, который будет работать следующим образом:

 foreach (Category::all() as $cat) { $categories[$cat->id] = $cat->category); } {{ Form::select('categories', $categories)}} 

… хотя я предпочитаю (в L4):

 foreach (Category::select('id', 'category')->orderBy('id','asc')->get() as $cat) { $categories[$cat->id] = $cat->category; } {{ Form::select('categories', $categories)}} 

Для Laravel 5.3.x

В контроллере

 $categories = Category::pluck('name', 'id'); 

Ввиду

 {{ Form::select('categories', $categories)}} 

для laravel 5.2

в контроллере

 $mechanics = User::where('role_id','3')->lists('name', 'id'); 

ввиду

 {{ Form::select('mechanic_id', [''=>'please select'] + $mechanics->toArray(), $order->mechanic_id , array('id' =>'material-select2','class' => 'form-control')) }}