I am trying to generate a drop-down list with values from a MySQL table using Laravel. The table is simple, two columns - id
and category
.
The following will retrieve all of the records (categories) but returns an object rather than an array, which is what I need for the drop-down code -
$categories = Category::all();
The code for the drop-down is:
{{ Form::select('category', $categories, $post->category_id) }}
Ideas?
UPDATE
bgallagh3r suggested using a foreach loop to convert each category to an array. Their code got me close but generated a bunch of funky nested optgroup
tags. I was able to get it down to just one optgroup
but that is one too many..
$categories = Category::all();
foreach ($categories as $cat)
{
$category = $cat->to_array();
$id = $category['id'];
$value = $category['category'];
$cats[] = array($id => $value);
}
And then, in the form:
{{ Form::select('categories', $categories)}}
I end up with this HTML:
<select name="categories">
<optgroup label="0">
<option value="1">Department News</option>
</optgroup>
<optgroup label="1">
<option value="2">General</option>
</optgroup>
...
</select>
For Laravel 5.3.x
In Controller
In View
You can try the 'lists' function:
$categories = Category::lists('category', 'id');
(Only for Laravel 3) Or even leave out the 'id' parameter, as it will default to the Model key, see http://laravel.com/api/source-class-Laravel.Database.Query.html#596
$categories = Category::lists('category');
(For Laravel 4, you do need the second param, see http://laravel.com/api/source-class-Illuminate.Database.Query.Builder.html#1034-1063)
Just tweeking bgallagh3r's code a little the following will work:
...although I prefer (In L4):
In Laravel 4, you can easily try like the following
In your view just add
{{ Form::select('category', $category) }}
. The result will be what you want, like the followingHow about this ?
for laravel 5.2
in controller
in view