在Laravel 4中使用数据库结果填充下拉菜单

7
我正在尝试在Laravel 4中使用数据库结果填充下拉菜单。我对Laravel非常陌生,这实际上是我的第一个网站,我边学边做。如果我使用了错误的术语或提供不足的信息,请告诉我。

我有一个公司信息的数据库,我需要让用户能够从下拉菜单中选择一个公司。如果该公司不在数据库中,则需要添加它。

对于选择菜单,它应该像这样:

[公司名称结果]

我在我的控制器中使用了以下代码:

$companies = RecordCompany::get();
$company_selector = array();

foreach($companies as $company) {
   $company_selector[$company->id] = $company->id;
   $company_selector[$company->company_name] = $company->company_name;
}

return View::make('admin.record_new', array('company_selector' => $company_selector));

这是我所看到的内容:

@if(count($client_selector)>0)
   {{ Form::select('company_id', $company_selector, array_values($company_selector)[0]) }}
@endif 

免责声明:这段代码是我在网上找到的。

首先,我不明白它如何在没有告诉它放置数据的位置的情况下填充值和选项文本。

其次,返回的错误是意外的。当我在表单代码中去掉 [0] 后,它告诉我 $company_selectorundefined

我在这里做错了什么?

3个回答

15
为了在下拉菜单中填充RecordCompany模型的所有记录,您可以在视图中执行以下操作:
{{ Form::select('company_id', RecordCompany::lists('company_name', 'id')) }}

注意:在 Laravel 5 中,方法lists已经被弃用,应使用pluck替代。

代码说明:

  1. Form::select方法创建一个HTML选择标记。
  2. company_id是选择标记的名称。
  3. 第二个参数是选择标记的选项。任何模型(在本例中为RecordCompany)中的lists方法将生成一个关联数组,其中包含该方法传递的参数(在本例中为idcompany_name),这些参数来自于模型数据库表中所有记录。

如果您希望,还可以从控制器调用lists方法,然后将其值传递到视图中,如下所示:

在控制器中

$company_lists = RecordCompany::lists('company_name', 'id');

return View::make('admin.record_new', array('company_lists' => $company_lists));

在视图中

{{ Form::select('company_id', $company_lists) }}

您可以在此处查看有关生成下拉列表的 Laravel 4 文档:http://laravel.com/docs/html#drop-down-lists


0

对于 Laravel 5,您可以像这样编写代码:

控制器代码

$company_lists = RecordCompany::pluck('company_name', 'id');
return View::make('admin.record_new', $company_lists);

查看代码

{{ Form::select('company_id', $company_lists) }}

0

我强烈反对在视图中使用数据库调用。原因如下:

它不是为此而设计的!
就是这样。

如果我是你(请注意if从句),我更喜欢填充一个常规数组,将company->id作为数组键,将任何其他您想要的特定键的信息作为值。在我的Blade代码中,我会这样做:

{{ Form::select('company_id', $companies) }}

在这里,“companies”将作为一个数组参数由控制器传递给视图。

视图不是用来进行数据库查询的,它们只是用来显示数据。就是这样!

话虽如此:

  • Form::select第一个参数是选择器的名称,你可以在Input::get中获取它。
  • 第二个参数是用于填充选择属性的列表(我们已经在上面谈论过了!)
  • 第三个参数同样重要,它指定了在加载页面时哪一个应该被选中(用于编辑)。你必须引用标识符(在这种情况下是公司ID)。出于明显的原因,这是可选的。

如果我没有表达清楚,请在下面提问!=D


谢谢回复。只是想确认一下,在控制器中设置数组的代码是否正确? - jerauf
不需要使用多维数组,二维数组就可以胜任。 - Dennis Braga
好的,这是我在控制器中所做的:$companies = RecordCompany::lists('company_name', 'id'); return View::make('admin.record_new', array('companies' => $companies)); 但它仍然给我一个未定义变量公司的错误。我做错了什么? - jerauf
你需要更改你的 array_value。它只接受先前选择的一个标识符,不能使用数组。 - Dennis Braga

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接