Php 具有多个条件的laravel 6搜索查询

Php 具有多个条件的laravel 6搜索查询,php,laravel,Php,Laravel,我有一个搜索表单,包含四个字段:客户电子邮件、供应商名称、状态和fromdate、todate,。我的搜索筛选器工作不正常。我希望如果有人搜索供应商名称和状态为“活动”的潜在客户,则它只显示该供应商状态为“活动”的潜在客户,但此处显示的潜在客户同时具有“接受”或“拒绝”以及“我的日期过滤器”不起作用,因此请帮助我。请引导我 我的控制器代码是 public function search(Request $request){ $users = DB::table('users')-

我有一个搜索表单,包含四个字段:客户电子邮件、供应商名称、状态和fromdate、todate,。我的搜索筛选器工作不正常。我希望如果有人搜索供应商名称和状态为“活动”的潜在客户,则它只显示该供应商状态为“活动”的潜在客户,但此处显示的潜在客户同时具有“接受”或“拒绝”以及“我的日期过滤器”不起作用,因此请帮助我。请引导我

我的控制器代码是

    public function search(Request $request){
    $users = DB::table('users')->where('is_admin', Null)->get();

    $customer_email = $request->input('customer_email');
    $vendor_id = $request->input('vendor_id');
    $status = $request->input('lead_status');

    $leads = DB::table('leads')
        ->leftJoin('users', 'leads.vendor_id', '=', 'users.id')
        ->select('leads.*', 'users.name')
        ->where('vendor_id', $vendor_id)
        ->orWhere('customer_email', $customer_email)
        ->orWhere('lead_status', $status)
        ->orWhere('leads.created_at', array($request->start_date, $request->end_date))
        ->orderBy('leads.created_at', 'DESC')->get();


    //dd($leads);

    return view('admin.view-leads', compact('leads'), compact('users'));

    
}
请帮忙。 提前谢谢


您应该像下面那样编写查询

$leads = DB::table('leads')
        ->leftJoin('users', 'leads.vendor_id', '=', 'users.id')
        ->select('leads.*', 'users.name')
        ->where('vendor_id', $vendor_id)
        ->when($customer_email, function($q,$customer_email){
             $q->where('customer_email', $customer_email);    
        })
        ->when($status, function($q,$status){
            $q->where('lead_status', $status);
        })
        ->where(function($q) use($request){
            if(isset($request->start_date) && isset($request->end_date)){
                $fromDate = date('Y-m-d H:i:s',strtotime($request->start_date));
                $toDate= date('Y-m-d H:i:s',strtotime($request->end_date));

                $q->where('leads.created_at', '>=', $fromDate)
                      ->where('leads.created_at', '<=', $toDate);
            }
        })
        ->orderBy('leads.created_at', 'DESC')->get();
$leads=DB::table('leads')
->leftJoin('users','leads.vendor_id','=','users.id')
->选择('leads.*','users.name')
->其中('vendor\u id',$vendor\u id)
->when($customer\u email,function($q,$customer\u email){
$q->where('customer\u email',$customer\u email);
})
->when($status,function($q,$status){
$q->where('lead_status',$status);
})
->其中(函数($q)使用($request){
if(isset($request->start\u date)和&isset($request->end\u date)){
$fromDate=date('Y-m-d H:i:s',STROTTIME($request->start_date));
$toDate=date('Y-m-d H:i:s',strottime($request->end_date));
$q->where('leads.created_at','>=',$fromDate)

->where('leads.created_at','这是一件非常简单的事情。只需遵循下面的代码即可

  • 获取
    为_admin
    null
    的用户

    $users=DB::table('users')->whereIsNull('is_admin')->get();

  • 检查是否提交任何筛选器的值

    if($request->filled('name\u of_filter\u input')){//code在这里}

  • 因此,筛选记录的查询将如下所示

    $query = DB::table('leads')->query();
    $query->leftJoin('users', 'leads.vendor_id', '=', 'users.id');
    $query->select('leads.*', 'users.name');
    
    if($request->filled('vendor_id')) {
        $query->where('vendor_id', $request->input('vendor_id'));
    }
    
    if($request->filled('customer_email')) {
        $query->where('customer_email', $request->input('customer_email'));
    }
    
    if($request->filled('lead_status')) {
       $query->orWhere('lead_status', $request->input('lead_status'));
    }
    
    if($request->filled('start_date') && $request->filled('end_date')) {
        $query->whereBetween(DB::raw('date(leads.created_at)'), [$request->input('start_date'), $request->input('end_date')]);
    } 
    
    $leads = $query->orderBy('leads.id', 'DESC')->get();
    
    此外,如果
    query()
    似乎是未定义的函数,则可以用相应的模型类替换
    DB::table('table_name')
    语法


    使用
    date()
    函数包装
    leads.created_at
    ,如果created_at列的类型为
    timestamp

    使用laravel作用域而不是where条件,则确保日期过滤器的日期为
    yyyyy-mm-dd
    格式:或者您不想使用“或where”?或者您需要“和where”(常规
    ,其中
    )看起来你正在尝试做
    时所做的事情
    谢谢@lagbox的建议。我更新了我的answer@MrPerfect先生,谢谢您的回答,但我仍然有相同的问题……如果我选择了一个供应商名称,并拒绝潜在客户,则会给出一个接受潜在客户。请使用dump确保您的$status变量值,因为查询返回潜在客户时基于t他状态值Ankit先生,谢谢你的回答,现在我收到这个消息调用未定义的方法illumb\Database\Query\Builder::Query()我如何解决这个问题???????是的,但它不起作用,先生…我返回$leads,它不显示任何值just
    dd($leads)
    检查它有什么。是的,但它是空白的。如果数据存在,请检查您的数据库中的特定筛选器。最后将
    get()
    替换为
    toSql()
    ,以获取原始sql,然后在您的phpmyadmin或任何类似工具中运行它。