首页 文章

Laravel命名'Where'和AJAX语句

提问于
浏览
0

这是我找不到文档的东西 . 我需要为我的页面进行多次AJAX搜索 . 它们都来自同一个数据库 . 搜索的唯一区别是他们可能只需要只搜索和搜索一列 .

例如:我的页面包含一个搜索整个数据库的输入,一个允许我按国家/地区筛选的选项和另一个允许我按类型筛选的筛选器 .

我遇到的问题是我无法,例如使选择仅搜索 country 列 . 它搜索整个数据库,而我只需搜索一列 .

问题在于我使用一个控制器来处理所有事情 - 只需要搜索整个数据库就可以了 . 当只搜索指定的列时,它不起作用 . 这是有问题的控制器:

$launchsitesatellite = DB::table('satellites')
    ->where(function($q) use ($request) {
        $q->orWhere('satname','LIKE','%'.$request->search.'%')
            ->orWhere('norad_cat_id','LIKE','%'.$request->search.'%')
            ->orWhere('country','LIKE','%'.$request->search.'%')
            ->orWhere('object_id','LIKE','%'.$request->search.'%');
        })
->where('site', $site_code)->get();

该控制器允许轻松搜索我的数据库 . 我现在将展示我的AJAX请求:

$("#filter-country").change(function() {
    $value=$(this).val();
    $.ajax({
        type: "get",
        url: "{{$launchsitename->site_code}}",
        data: {'search':$value, type:'country'},
        success: function(data){
          $('#launchsatdisplay').html(data);
        }
    });
});

这将获得用户提供的搜索请求 . 这,再次完美地工作,并设法得到我想要的结果 . 唯一的是它搜索我的整个数据库,而我只想搜索我的数据库中的 country 列 .

基本上,我的问题是:我是否可以命名AJAX请求,例如 country 并要求我的控制器仅使用 ->orWhere('country') 搜索请求,因此它只使用我的数据库中的 country 列?有可能以某种方式命名他们吗?

1 回答

  • 1

    由于您使用 type 指定搜索类型,因此您可以在子查询中使用它:

    $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)) { // If the type is specified, use it
                    $q->orWhere($request->type,'LIKE','%'.$request->search.'%');
    
                }
                if(!empty($request->rocket_type)) { // If the rocket_type is specified, use it
                    $q->orWhere('rocket_type','LIKE','%'.$request->rocket_type.'%');
    
                }
            }
    
        })
        ->where('site', $site_code)->get();
    

相关问题