我的搜索查询目前没什么问题。当我使用参数" comite_id"运行搜索查询时它正在工作,但当我想用" comite_id"运行搜索查询时和whereBetween与" date_min"和" date_max"结果不对,似乎结果并不关心whereBetween子句,因为我没有得到正确的日期范围。
有人知道我在哪里做错了吗?非常感谢提前
这是我的控制器:
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'));
}
答案 0 :(得分:1)
由于您使用的是orWhere()
,因此始终同时调用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]);
});
因此,您始终会在第一个位置运行,并且只包括whereBetween()
WHEN $dt_min
和$dt_max
都是真的。
Bonne chance Mathieu。