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 optgrouptags. 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>
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)