Laravel搜索多重过滤器

时间:2020-06-26 17:01:47

标签: php laravel search filter

我想搜索服务提供商和产品,并按位置和服务或位置和副产品进行筛选。我正在使用下面的代码`$ 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,但它显示的所有产品均未按城市进行过滤

2 个答案:

答案 0 :(得分:0)

您使用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);`

答案 1 :(得分:0)

这段代码对我有用

$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'),
        ]);