laravel - 如何在 laravel 中进行多重过滤查询?

标签 laravel eloquent

我有 3 个用于搜索的查询过滤器。第一个查询是选择选项查询,当我想在日期开始和日期结束查询之间进行搜索时,第二个查询是日期查询。最后一个查询是关于搜索名称等。唯一有效的查询只是最后一个。我的代码发生了什么,我认为我的代码没有任何问题

这是我使用过滤器的代码

filtercontroller.php

public function viewType(Request $request, ReportViewAll $reportview){

    $reportview = $reportview->newQuery();
    if ($request->has('program')) {
        if($request->input('program') == 'reportall'){
            $reportview;
        }
        elseif($request->input('program') == 'reportactive'){
            $reportview->where('crewprogram_isdisabled', '=',0);
        }
        elseif($request->input('program') == 'reporthistory'){
            $reportview->where('crewprogram_isdisabled', '=',1);
        }
    }

    if(($request->has('datestart') && $request->has('dateend'))){
        $reportview->whereBetween('crewprogrammemo_placement_date', 
        array($request->input('datestart'), $request->input('dateend')));
    }

    if($request->has('search')){
        $reportview->where ( 'employee_nik', 'LIKE', "%{$request->search}%" )
                ->orWhere ( 'employee_nama', 'LIKE', "%{$request->search}%" )
                ->orWhere ( 'show_focus_id', 'LIKE', "%{$request->search}%" )
                ->orWhere ( 'show_name', 'LIKE', "%{$request->search}%" );
    }

    return $reportview->get();

    // return view('CrewProgram.ReportView.index', compact('reportview'));
}

我应该怎么做才能让他们三个开始工作,而不仅仅是 1 个正在工作的查询

已编辑

public function viewType(Request $request, ReportViewAll $reportviewall){

    $reportviewall = $reportviewall->newQuery();

    if ($request->has('program')) {
        if($request->input('program') == 'reportall'){
            $reportviewall;
        }
        elseif($request->input('program') == 'reportactive'){
            $reportviewall->where('crewprogram_isdisabled', '=',0);
        }
        elseif($request->input('program') == 'reporthistory'){
            $reportviewall->where('crewprogram_isdisabled', '=',1);
        }
    }

    if(($request->has('datestart') && $request->has('dateend'))){
            $reportviewall->whereBetween('crewprogrammemo_placement_date', 
            array($request->input('datestart'), $request->input('dateend')));
    }

   If($request->has('search')){
        $reportviewall->where(function($query) use($request) {
            $query->where('employee_nik', 'LIKE', "%{$request->search}%" )
                ->orWhere ( 'employee_nama', 'LIKE', "%{$request->search}%" )
                ->orWhere ( 'show_focus_id', 'LIKE', "%{$request->search}%" )
                ->orWhere ( 'show_name', 'LIKE', "%{$request->search}%" );
        });
    }


    $reportviewall = $reportviewall->get();
            return view('CrewProgram.ReportView.index', compact('reportviewall'));
}

最佳答案

你有两个选择:

  • 使用 orWhere() :

    Model::query()->where([])->orWhere([])->get();
    
  • AND 使用第二个数组:

    Model::query()->where([['column1' , '!=' , 'value1'] , ['column2' , '=' , 'value2'] , ['column3' , '<' , 'value3']])->get();
    

关于laravel - 如何在 laravel 中进行多重过滤查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61272561/

相关文章:

php - 如何在使用 laravel 进行 PayPal 付款后插入数据

php - Laravel 最大文件大小验证规则不起作用

php - 如何使用 Laravel 框架更新 MySQL 中的 json 数据?

php - foreach不循环所有数据

php - Laravel - Blade View 中的分页模型排序链接

php - 扩展 Eloquent 类的构造函数

php - 如何在 Laravel Eloquent 中确定结果的优先级

laravel - Laravel 返回错误后如何显示 Bootstrap 通知/toast (MDBootstrap)

php - Laravel 5 集合问题 : Where not equal to

laravel - 类别和子类别查询?