我正在处理一个动态链接的下拉菜单,它应该根据所选值检索数据。
我正在尝试根据地区>市镇>银行信息显示银行详细信息
我能够成功检索到第一个下拉列表。但是我无法从中检索更多数据。数据返回空。
我是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) ;
}
答案 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');
}
}