2017-05-11 10 views
-1

このLaravelクエリでは、誰でもこれらのフィールドを検索できますが、誰かが検索可能なフィールドをすべて選択しなかった場合には、エラーが発生します。 whereInメソッドは変数の値を取得しないためです。もし私がifの状態でそれをチェックすれば、それは非常に大きいsqlになります。ですから、簡単にこれを行う簡単な方法はありますか?私の質問は以下の通りです。事前にお手数です。このクエリを短く簡単にする方法は?

public function filter(Request $r){ 
    searchQuery = DB::table('jobs')->whereIn('division_id', $r->location)->whereIn('industrytype_id', $r->industry)->whereIn('category_id', $r->category)->whereIn('company_id', $r->company_id)->whereIn('created_at', $r->date)->whereIn('salary_range', $r->salary_range)->whereIn('jobType', $r->jobType)->orderByRaw($r->shortby)->get(); 
} 

答えて

0

ここでは、配列を使用する方法です。私はあなただけ大きな取得します(SQL)ステートメントを受け入れるために必要だと思う

public function filter(Request $r){ 
    $searchQuery=DB::table('jobs')->where('division_id',$r->location)->where('industrytype_id',$r->industry)->where('category_id',$r->category)->where('company_id',$r->company_id)->where('created_at',$r->date)->where('salary_range',$r->salary_range)->where('jobType',$r->jobType)->orderBy($r->shortby)->get(); 
} 
+0

$ R->場所は、中でarray.Noの問題です –

0

:ようにあなたの方法を見てする必要があります。私はあなたが次のようなものを持っていると思います:

public function filter(Request $r){ 
    $searchQuery = DB::table('jobs'); 

    if($r->location){ 
     $searchQuery->whereIn('division_id', $r->location); 
    } 
    if($r->industry){ 
     $searchQuery->whereIn('industrytype_id', $r->industry); 
    } 
    if($r->category){ 
     $searchQuery->whereIn('category_id', $r->category); 
    } 
    if($r->company_id){ 
     $searchQuery->whereIn('company_id', $r->company_id); 
    } 
    if($r->date){ 
     $searchQuery->whereIn('created_at', $r->date); 
    } 
    if($r->salary_range){ 
     $searchQuery->whereIn('salary_range', $r->salary_range); 
    } 
    if($r->jobType){ 
     $searchQuery->whereIn('jobType', $r->jobType); 
    } 

    $searchQuery->orderByRaw($r->shortby)->get(); 
} 

これを行う場合は、実際にlaravel DBクラスを継承する独自のDBクラスを作成することができます。 $searchQuery->WhereInIfNotNull('industrytype_id', $r->industry);のように自分のクラスにいくつかの関数を書いてください。

0

私はすべてのフィルタをクエリに追加するためにスコープを使用します。モデル上で定義します。クイックサンプル:このような

public function scopeDivision($query,$searchParameter) 
{ 
    if(!is_null($searchParameter){ 
     return $query->whereIn('division_id', $searchParameter); 
    }else{ 
     return $query; 
    } 
} 

public function scopeIndustryType($query,$searchParameter) 
{ 
    if(!is_null($searchParameter){ 
     return $query->whereIn('industrytype_id', $searchParameter); 
    }else{ 
     return $query; 
    } 
} 
その後戻ってあなたのフィルタで

それを使用する:メソッドは、配列を望んでいるし、ここで私が知っている

Job::division($r->location) 
->industryType($r->industry) 
->category($r->category) 
->company($r->company_id) 
->created($r->date) 
->salaryRange($r->salary_range) 
->jobType($r->job_type) 
->orderByRaw($r->shortby) 
->get() 
関連する問題