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

Posted

技术标签:

【中文标题】在 Laravel 4 中使用数据库结果填充下拉菜单【英文标题】:Populating a dropdown menu with database results in Laravel 4 【发布时间】:2014-03-23 03:01:39 【问题描述】:

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

我在这里做错了什么?

【问题讨论】:

【参考方案1】:

要使用 RecordCompany 模型中的所有记录填充下拉菜单,您可以在视图中执行以下操作:

 Form::select('company_id', RecordCompany::lists('company_name', 'id')) 

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

代码说明:

    Form::select 方法创建一个 html 选择标记。 company_id 是选择标签的名称。 第二个参数是选择标签的选项。任何模型(本例中为 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

【讨论】:

【参考方案2】:

强烈反对在视图中使用 DB 调用。原因如下:

It ain't made for that!.期间

如果我在哪里(注意if 子句),我希望更好地实现一个常规数组,即company->id 数组键和您可能希望将该特定键作为值的任何其他信息。在我的刀片代码中,我是这样做的:

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

其中“公司”是一个数组,作为控制器的参数传递给视图。

视图不是为了进行数据库咨询。它们用于显示数据。就这样!

话虽如此:

Form::select 上的 first 参数是选择器的名称。你在Input::get 上得到的那个。 second 参数是实现 select 属性的列表(我们已经在上面讨论过!) 第三个,同样重要的是,您在加载页面上说选择了哪一个(用于版本)。您必须引用标识符(在这种情况下为公司 ID)。出于显而易见的原因,它是可选的。

如果我没有说清楚,请在这里问! =D

【讨论】:

感谢您的回复。只是为了确认一下,我在控制器中设置数组的代码是否正确? 不需要多维数组。二维可以完成这项工作。 好的,这就是我在控制器中所做的:$companies = RecordCompany::lists('company_name', 'id'); return View::make('admin.record_new', array('companies' => $companies)); 它仍然给我一个未定义的变量公司错误。我做错了什么? 您需要更改您的array_value。它只接受一个标识符用于先前的选择。不适用于数组。【参考方案3】:

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

控制器代码

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

查看代码

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

【讨论】:

以上是关于在 Laravel 4 中使用数据库结果填充下拉菜单的主要内容,如果未能解决你的问题,请参考以下文章

在 laravel 中使用 ajax 用数据库填充下拉列表

在 Laravel Jetstream 注册中添加填充的选择下拉列表

Laravel 4 从数据库中获取下拉表单的信息

Laravel/Javascript:在选择不同的选择/下拉列表后填充选择/下拉列表

如何从Laravel中的数据库记录中填充下拉菜单项

Laravel-从下拉列表中选择值后自动填充输入