2017-05-09 9 views
0

私は現在、私の検索クエリにはほとんど問題がありません。パラメータ "comite_id"だけを使って検索クエリを実行すると "comite_id"とwhereBetweenが "date_min"と "date_max"の検索クエリを実行したいときに結果が正しくないと思われます私は正しい日付範囲を取得していないため、whereBetween節を気にしません。パラメータ雄弁な質問のグループ

誰かが間違っていることを知っていますか?おかげでたくさん事前に

ここに私のコントローラ:あなたはorWhere()を使用しているため

public function getRetrocession(Request $request){ 

      $comites = Structure::where('type_structure_id' , '=' ,'3')->pluck('nom_structure' , 'id'); 

      $search = $request->input('comite_id'); 
      $dt_min = $request->input('dt_min'); 
      $dt_max = $request->input('dt_max'); 


      if ($search) { 
       $query = Retrocession::where('comite_id', '=', $search) 

         ->orWhere(function ($q) use($search , $dt_min , $dt_max) { 
          $q->where('comite_id', '=', $search) 
           ->whereBetween('dt_retrocession', [ $dt_min , $dt_max]); 
         }); 

      }else { 
       $query = Retrocession::select(); 
      } 

      $retrocessions = $query->orderBy('dt_retrocession', 'DESC')->paginate(10) 
       ->appends(['recherche' => $search]); 

      return view('retrocession/index' , compact('retrocessions' , 'comites')); 


     } 

答えて

1

それは常にwhere()orWhere()の両方を呼び出します。したがって、where()およびorWhere()の結果を含む。あなたはどこだから、常に最初に実行し、このよう

$query = Retrocession::where('comite_id', $search) 
->when($dt_min && $dt_max, function($q) use ($dt_min, $dt_max) { 
    $q->whereBetween('dt_retrocession', [$dt_min, $dt_max]); 
}); 

を試し、そして$dt_min$dt_maxが両方とも該当する場合のみwhereBetween()を含めることができます。

Bonne chanceマチュー。

+0

完璧に動作します!本当にありがとうEddy –