我正在尝试使用下拉菜单过滤查询中的记录。想法是在下拉菜单改变时使用过滤器,所以我想解决方案是使用ajax,但我不太了解它以及如何在laravel中使用它。
这是我的控制器:
public function setSelectTestView()
{
$test = Test::orderBy('updated_at', 'des')->lists('nom', 'id');
$cursos = Curs::orderBy('nom', 'asc')->lists('nom', 'id');
$assignatures = Assignatura::orderBy('nom', 'asc')->lists('nom', 'id');
return View::make('Test.results.result_select_test')
->with(array('test' => $test, 'cursos' => $cursos, 'asg' => $assignatures));
}
和我的刀片:
<fieldset>
{{ Form::select('curs', $cursos) }}
{{ Form::select('assignatura', $asg) }}
</fieldset>
{{ Form::open(array('action' => array('ResultsController@setSelectTestView'))) }}
</br>
<fieldset>
{{ Form::select('test', $test) }}
</fieldset>
</br><input type="submit" value="Seleccionar"/>
{{ Form::close() }}
我想要的是按$test
和curs
过滤变量assignatura
,例如
$test = Test::where('curs_id', $curs_id)->where('assignatura_id', $asg_id);
但是以异步方式执行此操作并应用一个过滤器,具体取决于哪个下拉菜单已更改,但是如果第二个过滤器已更改,则继续应用第一个过滤器(均已应用)
答案 0 :(得分:2)
您可以先从选择框的onchange()事件中获取过滤器的值,然后通过post将其发送到控制器。
$('select[name="curs"]').onchange(){
$cur = $(this).val();
$asg = $('select[name="assignatura"]').val();
$.ajax({
url:'/result/search',
data:{cur:$cur,asg:$asg;},
cache:false,
type:'POST',
beforeSend: function (xhr) {
var token = $('meta[name="csrf_token"]').attr('content');
if (token) {
return xhr.setRequestHeader('X-CSRF-TOKEN', token);
}
},
success:function(data){ // this is view data returned by controller
console.log(data);
$('#result_container').html(data); // use it to fill your results
}
})}
将您的路线用作
Route::post('/result/search','ResultController@search');
然后在控制器中使用参数来查询结果。
public function search(){
$cur_id = Input::get('cur');
$asg_id = Input::get('asg');
$test = Test::where('curs_id', $cur)->where('assignatura_id', $asg_id);
return view('Test.results.result_select_test',compact('test'));}