【问题标题】:Laravel multiple filter with searchLaravel 带搜索的多重过滤器
【发布时间】:2020-10-17 08:06:56
【问题描述】:

我想搜索服务提供商和产品,并按位置和服务或按位置和副产品进行过滤。我正在使用下面的代码`$results = new ClientProfile;

    if (request()->has('service-provider')) {
        $results = $results->where('jobsc_id', request('service-provider'));
    } elseif(request()->has('product')) {
        $results = $results->where('product_id', request('product'));
    } elseif(request()->has('city')){
        $results = $results->where('divsec_id', request('city'));
    } else {
        $results = ClientProfile::searched();
    }  
    
    $results = $results->where('profile_state', 'active')->paginate(10)->appends([
        'service-provider' => request('service-provider'),
        'product' => request('product'),
        'city' => request('city'),
    ]);
    
            
    return view('results')->with('results', $results);`

虽然它显示 URL 为 domain.com/results?product=2&city=78,但它显示了所有没有按城市过滤的产品

【问题讨论】:

    标签: php laravel search filter


    【解决方案1】:

    你用if elseif所以它找一个的时候,第二个也不来。

    使用when 代替if else

    $results = new ClientProfile::when(request()->has('service-provider'), function($q){
        $q->where('jobsc_id', request('service-provider'));
    })
    ->when(request()->has('product'), function($q){
        $q->where('product_id', request('product'));
    })
    ->when(request()->has('city'), function($q){
        $q->where('divsec_id', request('city'));
    })
    ->when(count($request->all()) === 0, function($q){
        $q->searched();
    })
    ->where('profile_state', 'active')->paginate(10)->appends([
        'service-provider' => request('service-provider'),
        'product' => request('product'),
        'city' => request('city'),
    ]);
    
            
    return view('results')->with('results', $results);`
    

    【讨论】:

    • 谢谢,这行得通,但我必须修复上面代码中的一些错误
    • 你好,我可以将搜索结果附加到过滤器,因为当我们搜索时,过滤器不起作用
    • @ChamilaJayawardana 哪个过滤器?我不太了解你
    【解决方案2】:

    这段代码对我有用

    $results = ClientProfile::when(request()->has('service-provider'), function($q){
                $q->where('jobsc_id', request('service-provider'));
            })->when(request()->has('product'), function($q){
                $q->where('product_id', request('product'));
            })->when(request()->has('city'), function($q){
                $q->where('divsec_id', request('city'));
            })->when(count(request()->all()) === 0, function($q){
                $q->searched();
            })->where('profile_state', 'active')->paginate(10)->appends([
                'service-provider' => request('service-provider'),
                'product' => request('product'),
                'city' => request('city'),
            ]);
            
     

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-08-10
      • 1970-01-01
      • 2017-02-14
      • 1970-01-01
      • 2017-09-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多