2017-08-04 67 views
-2

我有以下函數可以從數據庫中獲取與作業相關的一些數據。用戶可以搜索職位/關鍵字,城市和/或類別。用戶可以選擇一個選項,例如僅按職位或類別搜索職位。或者他可以使用所有選項進行深度搜索。以下是我的功能:在laravel中寫入函數

public function jobsearch(Request $request) 
    { 
     $keyword = htmlspecialchars($request->input('keyword')); 
     $city_id = $request->input('city_id'); 
     $category_id = $request->input('category_id'); 

     if($keyword !== '' && $city_id != 0 && $category_id == 0) 
     { 
     $data = DB::table('job_details')->where('job_title', 'like', '%'.$keyword.'%')->where('city_id', $city_id)->get(); 
     } 
     elseif($keyword !== '' && $city_id == 0 && $category_id != 0) 
     { 
     $data = DB::table('job_details')->where('job_title', 'like', '%'.$keyword.'%')->where('category_id', $category_id)->get(); 
     } 
     elseif($keyword == '' && $city_id != 0 && $category_id != 0) 
     { 
     $data = DB::table('job_details')->where('category_id', $category_id)->where('city_id', $city_id)->get(); 
     } 
     elseif($keyword !== '' && $city_id == 0 && $category_id == 0) 
     { 
     $data = DB::table('job_details')->where('job_title', 'like', '%'.$keyword.'%')->get(); 
     } 
     elseif($keyword == '' && $city_id == 0 && $category_id != 0) 
     { 
     $data = DB::table('job_details')->where('category_id', $category_id)->get(); 
     } 
     elseif($keyword == '' && $city_id != 0 && $category_id == 0) 
     { 
     $data = DB::table('job_details')->where('city_id', $city_id)->get(); 
     } 
     else 
     { 
     $data = DB::table('job_details')->where('job_title', 'like', '%'.$keyword.'%')->where('category_id', $category_id)->where('city_id', $city_id)->get(); 
     } 

     foreach($data as $data) 
     { 
      echo $data->job_title.'<br>'; 
     } 

    } 

正如你所看到的,這個函數對許多if和elseif語句來說太亂了。我的問題是,如果有什麼方法可以用乾淨的方式編寫給定的函數?你會如何在你的風格中編寫給定的功能?請幫忙。

回答

2

你真的錯過了Laravel查詢構建器的最佳部分。

public function jobsearch(Request $request) { 
    // htmlspecialchars makes no sense here 
    $keyword = $request->input('keyword'); 
    $city_id = $request->input('city_id'); 
    $category_id = $request->input('category_id'); 

    $query = DB::table('job_details'); 

    if($keyword) { 
     $query->where('job_title', 'like', '%'.$keyword.'%'); 
    } 

    if($city_id) { 
     $query->where('city_id', $city_id); 
    } 

    if($category_id) { 
     $query->where('category_id', $category_id); 
    } 

    $results = $query->get(); 

    foreach($data as $data) { ... } 
} 
+0

@Rishi是的,複製/粘貼故障。我編輯過。 – ceejayoz