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 下拉列表的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 下拉列表

Laravel:填写一个包含多个下拉列表的表单

laravel Blade 如何设置下拉列表的选项

php - Laravel:如何在从下拉列表中选择更改后加载 Ajax 数据?

如果单击按钮,下拉列表选项会更改(VueJS 和 Laravel 6)

在 laravel 中创建一个下拉列表来选择用户角色 - laravel