无法从动态链接的选择下拉列表中检索数据-Laravel

时间:2018-12-10 17:52:24

标签: php laravel laravel-5 eloquent laravel-5.2

我正在处理一个动态链接的下拉菜单,它应该根据所选值检索数据。

我正在尝试根据地区>市镇>银行信息显示银行详细信息

我能够成功检索到第一个下拉列表。但是我无法从中检索更多数据。数据返回空The second dropdown return empty results

The url returns 200 status code

我是laravel和开发的新手。感谢您的协助。

为此,我将再添加一个问题, 如果我想在下拉选择中添加更多表格以及银行,例如:交易。我该如何实现?

index.blade.php

 <div class="container">
        {!!Form::open()!!}
        <div class="form-group">
            <label for=""> District</label>
            <select name="district_option" id="district_option" class="form-control">
                <option value="0" disabled="true" selected="true">------ Select District --------</option>
                @foreach ($districts as $key => $district)
                <option value="{{$district->id}}">{{$district->district_name}}</option>
                @endforeach
            </select>
        </div>
        <div class="form-group">
            <label for=""> Municipality</label>
            <select name="municipal_option" id="municipal_option" class="form-control">
                <option value="0" disabled="true" selected="true">------ Select District First--------</option>
            </select>
        </div>
<table class="table table-striped">
    <thead>
        <tr> 

           <td> Bank Name</td>
        <td>Bank Acc No </td>
        <td>Bank IFSC Code</td>
        </tr>        
    </thead>
            <tbody>
                <tr> 
                        {{-- <td>1</td>
                        <td>1</td>
                        <td>1</td> --}}
                </tr>
            </tbody>
</table>
        {!!Form::close()!!}

脚本

   $('#district_option').on('change',function(e){
        console.log(e);
        var district_id = e.target.value;
        var BASEURL = "{!! url('/admin/bank/') !!}";
        console.log(district_id);
        $.get( BASEURL + '/municipalview?district_id=' + district_id, function(data){
            console.log(data);
            $('#municipal_option').empty();
            $('#municipal_option').append('<option value="0" disabled="true" selected="true">------ Select District First--------</option>');
         $.each(data,function(index, municipalObj){
            $('#municipal_option').append('<option value="'+ municipalObj.id +'"> '+ municipalObj.municipal_name +' </option>');
               })
                });
                }); 


        $('#municipal_option').on('change',function(e){
        // console.log(e);  
        var municipal_id = e.target.value; 
        var BASEURL = "{!! url('/admin/bank/') !!}";
        console.log(municipal_id);
        $.get( BASEURL + '/bankview?bank_id=' + municipal_id, function(data){
            console.log(data);

                });
                }); 

我的路线文件:

//添加银行详细信息

Route::resource('bank', 'bankController');
Route::get('admin/bank/municipalview/', 'bankController@municipalView');
Route::get('admin/bank/bankview/', 'bankController@bankView');

bankController文件

 public function municipalView()
{


    $districts_id = Input::get('district_id');
    $municipalities = Municipality::where('district_id', '=', $districts_id )->get();
    return response()->json($municipalities) ;
}   

public function bankView()
{

    $municipals_id = Input::get('municipal_id');
    $banks = Bank::where('district_id', '=', $municipals_id )->get();
    return response()->json($banks) ;
}   

1 个答案:

答案 0 :(得分:0)

当前的挑战是您有两个后续查询,其中刀片模板将仅动态呈现第一个查询的结果。您有很多选择:

A)预加载所有数据,并将它们发送到客户端,然后让Javascript处理。例如。您将发送一个对象,例如:

{regionA: ["bank1", "bank2", "bank3"], regionB ["bank4, "bank4", "bank5"] }

然后根据结构通过javascript动态创建选项。

B)让javascript(AJAX)处理第二次查询以获取更深层次的数据,并填写选项。有一些库可以帮助解决此问题(例如Selectize.js)。

C)有一些高级的前端框架,例如Vue.js,可以帮助管理客户端浏览器的“状态”。如果您想在客户端执行更复杂的逻辑,可能需要研究一下。

更新:

看看您的代码,我认为问题在于请求数据如何传递到您的控制器方法。快速的解决方法是在函数中传递(Request $ request)并查看传递的内容-但我建议花一些时间进行雄辩的关系,并了解如何获得Laravel(https://laravel.com/docs/5.7/eloquent的ORM为您做到这一点。简而言之,您可能会有这样的路线:

Route::get('admin/bank/municipalview/{District}', 'bankController@municipalView');

然后是一个像这样的控制器:

 public function municipalView(Disctrict $district)
{

    $municipalities = District::municipalities();
    return response()->json($municipalities) ;
}   

并确保您拥有Disctrict模型(php Artisan make模型)

然后在模型中可以定义关系:

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Disctrict           

 /**
 * Get the municipalities for a district.
 */
public function municipalities()
   {
       return $this->hasMany('App\Municipality');
   }
}