当我需要搜索/过滤数据库时,我有一个控制器可以处理AJAX jQuery调用:
$launchsitesatellite = DB::table('satellites')
->where(function($q) use ($request) {
if(empty($request->type) && empty($request->rocket_type)) {
$q->orWhere('satname','LIKE','%'.$request->search.'%')
->orWhere('norad_cat_id','LIKE','%'.$request->search.'%')
->orWhere('country','LIKE','%'.$request->search.'%')
->orWhere('object_id','LIKE','%'.$request->search.'%');
} else {
if(!empty($request->type)) {
$q->orWhere($request->type,'LIKE','%'.$request->search.'%');
}
if(!empty($request->object_type)) {
$q->orWhere('object_type','LIKE','%'.$request->object_type.'%');
}
if(!empty($request->launch_year)) {
$q->orWhere('launch','LIKE','%'.$request->launch_year.'%');
}
}
})
->where('site', $site_code)->Paginate(300);
该控制器可以毫无问题地搜索/过滤我的数据库 . 我唯一想解决的问题是允许应用多个过滤器 . 例如,当我按对象类型过滤然后决定按国家/地区过滤时,它会重置对象类型 .
我希望能够做的是允许它按对象类型和国家进行过滤,而不仅仅是一个 .
缺少示例/文档,因此我找不到任何示例如何完成 .
编辑:JS AJAX调用
$("#filter-type").change(function() {
$value=$(this).val();
$.ajax({
type: "get",
url: "{{$launchsitename->site_code}}",
data: {'search':$value, type:'object_type'},
success: function(data){
$('#launchsatdisplay').html(data);
}
});
});
1 回答
我认为你're having this issue is because you'使用
orWhere
而不是where
的原因所以理论上你使用的过滤器越多,你将返回的结果越多(而不是限制结果) .另外,仅供参考,Laravel Query Builder附带了一个
when()
方法,它可以替代使用多个if
语句 . 所以主要的else
部分看起来像:显然,你不必这样做(我以为我会提到它) .
希望这可以帮助!