Generate drop-down list input with values from DB

2020-02-28 07:41发布

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>

标签: php laravel
7条回答
霸刀☆藐视天下
2楼-- · 2020-02-28 08:09

For Laravel 5.3.x

In Controller

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

In View

{{ Form::select('categories', $categories)}}
查看更多
姐就是有狂的资本
3楼-- · 2020-02-28 08:20

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)

查看更多
疯言疯语
4楼-- · 2020-02-28 08:20

Just tweeking bgallagh3r's code a little the following will work:

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

...although I prefer (In L4):

foreach (Category::select('id', 'category')->orderBy('id','asc')->get() as $cat)
{
  $categories[$cat->id] = $cat->category;
}
{{ Form::select('categories', $categories)}}
查看更多
祖国的老花朵
5楼-- · 2020-02-28 08:21

In Laravel 4, you can easily try like the following

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

In your view just add {{ Form::select('category', $category) }}. The result will be what you want, like the following

<select name="category">
        <option value="category_id">category_name</option>
</select>
查看更多
戒情不戒烟
6楼-- · 2020-02-28 08:24

How about this ?

foreach (Category::all() as $cat)
{
    $categories[$cat->id] = $cat->category;
}
{{ Form::select('categories', $categories)}}
查看更多
老娘就宠你
7楼-- · 2020-02-28 08:32

for laravel 5.2

in controller

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

in view

{{   Form::select('mechanic_id', 
    [''=>'please select'] + $mechanics->toArray(), $order->mechanic_id , 
     array('id' =>'material-select2','class' => 'form-control'))  }}
查看更多
登录 后发表回答