使用DB表中的值生成下拉列表输入


Generate drop-down list input with values from DB table

我试图使用Laravel从MySQL表生成一个下拉列表。表很简单,有两列——idcategory

下面的代码将检索所有的记录(类别),但是返回一个对象而不是一个数组,这是我下拉代码所需要的-

$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>

您可以试试'lists'函数:

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

(仅适用于Laravel 3)或者甚至省略'id'参数,因为它将默认为Model键,参见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类别将返回一个对象数组,你需要在将对象传递给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)}}

…虽然我更喜欢(In L4):

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

For Laravel 5.3.x

In Controller

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

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

for laravel 5.2

in controller

$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'))  }}