我正在尝试使用Laravel生成一个包含来自MySQL表的值的下拉列表。该表格很简单,有两列 - 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>
答案 0 :(得分:30)
您可以尝试'列表'功能:
$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)
答案 1 :(得分:4)
根据您是否为模型使用Eloquent,Category将返回一个对象数组,您需要在将对象传递给Form类之前将其转换为数组。
foreach (Category::all() as $cat)
{
$categories[] = array($cat->id => $cat->category);
}
{{ Form::select('categories', $categories)}}
答案 2 :(得分:3)
在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>
答案 3 :(得分:1)
这个怎么样?
foreach (Category::all() as $cat)
{
$categories[$cat->id] = $cat->category;
}
{{ Form::select('categories', $categories)}}
答案 4 :(得分:1)
稍微调整一下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)}}
答案 5 :(得分:1)
对于Laravel 5.3.x
在控制器
中$categories = Category::pluck('name', 'id');
在视图中
{{ Form::select('categories', $categories)}}
答案 6 :(得分:0)
for 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')) }}