eloquent query

时间:2017-05-09 22:59:32

标签: laravel

我的搜索查询目前没什么问题。当我使用参数" 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'));


        }

1 个答案:

答案 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。