7

我正在尝试使用 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>
4

7 回答 7

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

于 2013-01-08T22:32:18.200 回答
4

根据您是否在模型中使用 Eloquent,Category 将返回一个对象数组,您需要先将对象转换为数组,然后再将它们传递给 Form 类。

foreach (Category::all() as $cat)
{
    $categories[] = array($cat->id => $cat->category);
}
{{ Form::select('categories', $categories)}}
于 2013-01-08T18:19:08.043 回答
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>
于 2014-12-30T20:10:25.723 回答
1

How about this ?

foreach (Category::all() as $cat)
{
    $categories[$cat->id] = $cat->category;
}
{{ Form::select('categories', $categories)}}
于 2013-05-28T06:32:53.547 回答
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)}}
于 2013-12-10T09:56:57.280 回答
1

对于 Laravel 5.3.x

在控制器中

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

在视图中

{{ Form::select('categories', $categories)}}
于 2016-11-12T16:48:13.760 回答
0

对于 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'))  }}
于 2016-03-03T18:26:21.090 回答