Laravel 下拉列表
Posted
技术标签:
【中文标题】Laravel 下拉列表【英文标题】:Laravel dropdown list 【发布时间】:2015-03-14 22:39:41 【问题描述】:我正在使用 Laravel 框架,我有两个下拉列表,它们都从数据库表中读取数据,
第一个它从表中读取所有记录并将其填充到选择列表中
这是我的代码:
<div class="form-group">
Form::select('advertiserName', Advertiser::all()->lists('advertiserName', 'advertiserId'))
</div>
它显示广告商名称,并在广告商上传递 id。
我希望它显示与上述选定广告商相关的所有品牌。
这是我的代码:
<div class="form-group">
Form::select('brandName', Brand::where('advertiserId', '=', '3')->lists('brandName', 'id'))
</div>
advertisingrId 是广告客户的外键,3 必须替换为您在第一个下拉列表中选择的advertisingrId,基本上我想将变量从第一个选择列表传递到第二个选择列表
谢谢
【问题讨论】:
那你就得用Ajax了。 您必须使用 javascript(onChange 事件)和 ajax,在 laravel 中您无法将数据从第一个列表传递到第二个列表 @kamlesh.bar 如果我使用 JavaScript,我将如何将值传递回我的 where 语句 尝试“Select2”而不是使用普通选择。访问:select2.github.io. @SimphiweInnocent 我的意思是通过将第一个选择的值传递给控制器并最终调用模型函数以返回所需的结果并替换 div 来调用控制器函数。 【参考方案1】:基本上,您需要使用 AJAX 根据从第一个下拉列表中选择的选项获取第二个下拉列表的数据。
在特定的 div 中创建第二个下拉菜单并在 ajax 调用后从 ajax 响应中替换 div 的内容。
【讨论】:
【参考方案2】:如上所述,实现此目的的最佳方式是通过 AJAX 请求。以下是如何实现此功能的示例。
首先创建一个呈现品牌选择框的视图部分。像这样(这段代码基于 Bootstrap 3):
Form::label('brandName', 'Brand', ['class' => 'control-label col-sm-2'])
<div class="col-sm-10">
Form::select('brandName', $brands, null, ['class' => 'form-control'])
</div>
现在,在您的 routes.php 文件中添加以下路由:
Route::get('brand-list/id', ['as' => 'brands', 'uses' => 'BrandsController@brandList']);
在您的 BrandsController.php 文件(或您用来处理此问题的任何控制器)中添加一个名为 brandList() 的方法;
public function brandList($id)
// Return an array of brands for the selected advertiser name ID if available
$brands = $this->brand->where('advertiserId', $id)->lists('brandName', 'id'); // I'm using dependency injection here so you'll need to assign your Brand model to the $this->brand property of this classes constructor method
if ( ! isset($brands))
$brands = ['No brands available' => null]; // return a generic array containing 1 item with a value of null so you can handle it in your view. You could also return something else here such a boolean of false and then handle that in your AJAX request to return an error or info message
return View::make('brands.partials.select', compact('brands'));
现在是 AJAX:
$('#advertiserName').change(function(e)
var advertiserId = $(this).val();
var url = '/brand-list/' + advertiserId;
$.get(url, function(data)
$('.brands').html(data); // The returned view with the brand select input
);
);
然后,在您的初始表单视图中,您需要创建一个带有 .brands 类的空 div,我们将使用它来填充通过 AJAX 请求返回的 HTML。例如,如果您使用的是 Bootstrap 3,则如下所示:
<div class="form-group brands"></div>
这应该可以按您的需要工作,但我尚未测试此代码,所以如果您有任何问题,请告诉我。显然,这是基于可用信息的通用代码,并且有很多方法可以给猫剥皮。
【讨论】:
以上是关于Laravel 下拉列表的主要内容,如果未能解决你的问题,请参考以下文章
php - Laravel:如何在从下拉列表中选择更改后加载 Ajax 数据?