【发布时间】:2017-08-09 20:40:10
【问题描述】:
当我需要搜索/过滤数据库时,我有一个控制器可以处理 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);
}
});
});
【问题讨论】:
-
你是否考虑过使用带有 Laravel Scout 的搜索引擎:laravel.com/docs/5.4/scout?
-
你使用的是什么版本的 Laravel?
-
@RossWilson 我使用的是 5.4
-
当前代码有什么问题?
-
@LakshayJain 我可以选择一个过滤器,但是当我选择第二个过滤器时,它会重置第一个。