php - 如何使用 session 传递的变量创建分页

标签 php laravel session elasticsearch pagination

我正在使用此package在Laravel 5.4中使用Elastic Search进行研究。

我有一个屏幕供用户满足搜索要求。通过这种方法,我将验证已填充的字段,并创建将在ES中搜索的查询。

public function search(Request $request)
{   
    $searchParams = ['vehicle', 'year_min', 'year_max', 'mileage_min', 'mileage_max', 'exchange', 'keyword', 'optionals', 'phone', 'daterange'];
    $query = ES::type("ads");

    foreach($searchParams as $param) {

        if($request->has($param)) {

            if($param == 'vehicle') {
                $results = $query->where("vehicle", "like", $request->vehicle);
            }

            if($param == 'keyword') {
                $results = $query->where("description", "like", $request->keyword);
            }

            if($param == 'year_min') {
                $results = $query->where("year", ">=", intval($request->year_min));
            }

            if($param == 'year_max') {
                $results = $query->where("year", "<=", intval($request->year_max));
            }

            if($param == 'mileage_min') {
                $results = $query->where("mileage", ">=", intval($request->mileage_min));
            }

            if($param == 'mileage_max') {
                $results = $query->where("mileage", "<=", intval($request->mileage_max));
            }

            if($param == 'exchange') {
                $results = $query->where("exchange", "like", $request->exchange);
            }

            if($param == 'optionals') {
                $results = $query->where("optionals", "like", serialize($request->optionals));
            }

            if($param == 'phone') {
                $results = $query->where("phone", "exists", true);
            }

        }
    }

    $all_leads = $results->orderBy("created_at", "desc")->paginate(15);
    $all_leads->setPath('/dashboard/crawler/resultados');

    Session::put('all_leads', $all_leads);
    return redirect()->action('DashboardAdmin\ProspectingLeadController@results');
}

挂载查询后,我正在调用另一个方法来呈现结果并按 session 传递数组。
$all_leads = $results->orderBy("created_at", "desc")->paginate(15);
$all_leads->setPath('/dashboard/crawler/resultados');

Session::put('all_leads', $all_leads);
return redirect()->action('DashboardAdmin\ProspectingLeadController@results');

当我按 session 搜索结果并将其发送到 View 时,分页器仅列出第一页的结果,如果单击分页按钮,它将更改URL,但不会更改记录。
public function results()
{
    $all_leads = Session::get('all_leads');
   return view('dashboard_admin.prospecting_lead.index', compact('all_leads'));
}

最佳答案

在result方法中,您从缓存中获取结果,因此分页器不起作用。每次只会得到那15个结果。为了使分页器正常工作,您需要调用分页器,以便它可以基于查询字符串获取结果。

关于php - 如何使用 session 传递的变量创建分页,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44208303/

相关文章:

php - Laravel 搜索关系

php - guest 用户的授权和策略

PHP session 变量未传递到下一页

php - 仅当 Nginx 文件不存在时才将 URL 重定向到 PHP

php - 无法绑定(bind)地址[0] : php error

php - Laravel - 支持可能包含斜杠的 URL 片段的正确方法?

c++ - 如何从 session ID 中查找用户名?

java - @Scheduled 中的 Spring session 范围对象

php - 如何删除 php 中的零除消息并改进我的代码?

php - 如何在MYSQL中使用多个foreach正确插入