2017-08-07 61 views
0

這是我無法找到文檔的東西。我需要爲我的頁面進行多個AJAX搜索。他們都來自同一個數據庫。搜索的唯一區別是他們可能只需要搜索並只搜索一列。Laravel命名'Where'和AJAX語句

例如:我的頁面包含一個搜索整個數據庫的輸入,一個允許我按國家過濾的選擇和另一個允許按類型過濾的過濾器。

我遇到的問題是我無法使用,例如使select只搜索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列?有可能以某種方式命名它們嗎?

+0

你的意思是' - > orWhere($請求 - >類型, '喜歡',「% 」。$請求 - >搜索。 '%'):'? –

+0

@OmisakinOluwatobi - 不幸的是,這是行不通的。每當我搜索我得到一個500服務器錯誤。我想這是因爲它向搜索URL添加了一個'&type = country'。 –

+0

這意味着您必須確保「類型」中的文本與數據庫表中的列相同 –

回答

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(); 
+0

謝謝! - 完美的作品!有一件事 - 如果我想添加另一個搜索,那麼過程是什麼,例如,只對列「rocket_type」進行過濾。我會添加另一個「orWhere」查詢嗎?還是我會做其他的事情? –

+0

您只需將其添加到其他數據庫搜索。 'if'塊會照顧你通過的任何類型。 – aynber

+0

我剛剛嘗試在'else'語句中添加' - >或者WWE($ request-> rocket_type,'LIKE','%'。$ request-> search。'%');'但沒有產生任何結果。我用'type'替換了'rocket_type'。你能確認我是否正確地做到了這一點? –