Laravel下拉列表

时间:2015-01-16 10:35:35

标签: php mysql laravel laravel-4

我使用的是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>

advertiserId是广告客户的外键,3必须替换为您在第一个下拉列表中选择的advertiserId,基本上我想将变量从第一个选择列表传递到第二个

谢谢

2 个答案:

答案 0 :(得分:0)

基本上,您需要使用AJAX根据从第一个下拉列表中选择的选项获取Second Dropdown的数据。

在特定div中创建第二个下拉列表并在ajax调用之后从ajax响应中替换div的contets。

答案 1 :(得分:0)

如上所述,实现此目的的最佳方法是通过AJAX请求。以下是如何实现此功能的示例。

首先创建一个视图partial,用于呈现品牌的选择框。像这样的东西(这段代码基于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>

这应该可以按你的需要工作,但我没有测试过这段代码,所以如果你有任何问题请告诉我。显然,这是基于可用信息的通用代码,并且有许多方法可以为猫提供皮肤。