过滤搜索引擎数据

时间:2017-08-29 15:02:29

标签: php laravel

我在使用表单

过滤信息时遇到问题

这是我的代码

$cooperation = Cooperation::with('user')->get();



$search_results = [];

$search = Input::get('q');
$category = Input::get('c');
$land = Input::get('l');

if(!empty($search || $category || $land)){



    $search_results = $cooperation;



    if (!empty($search)){
        $search_results = $search_results->where('title', 'like', '%'. $search .'%');

    }

    if (!empty($category)){
        $search_results = $search_results->where('category', $category);
    }

    if (!empty($land)){
        $search_results = $search_results->where('land', $land);
    }

    $exist_s = true;
    $not_s = false;
    return view('cooperation.index', compact('cooperation', 'search_results', 'exist_s', 'not_s'));


}

else{

    $not_s = true;
    $exist_s = false;
    return view('cooperation.index', compact('cooperation', 'search_results', 'exist_s', 'not_s'));

}

从表单中检索数据后,我试图按顺序通过数组过滤每个变量,但没有任何反应,唯一有效的是过滤$ category但我不知道为什么其余的不起作用。

我正在寻找一个如何有效过滤数据的解决方案,如果if()在if()之后,我可以做到,但是如果有更多变量,那将是一个非常低效的解决方案。

如果有人事先有任何想法,谢谢你。

2 个答案:

答案 0 :(得分:0)

我不知道你的请求为什么不起作用。但是,如果您正在寻找一种过滤结果的通用方法,我相信一个带有过滤器变量数组的简单foreach循环可以解决这个问题:

$filters = []; //your variables such as category and land go in there

foreach ($filters as $column => $value){
    $search_results = $search_results->where($column, $value);
}

答案 1 :(得分:0)

如果您希望根据您的要求进行有效搜索,可以使用以下输入变量:

$columns, $searchColumns, $search_operator, $search_input

$columns可以是您可以订购的列,searchColumns可以是您希望进行搜索的列,search_operator可以是like,{{ 1}},<<=in>等,您甚至可以使用>=作为direction或{{1在值中,所以你可以这样:

asc