Php 拉拉维尔长复本

Php 拉拉维尔长复本,php,laravel-5,laravel-pagination,Php,Laravel 5,Laravel Pagination,我在拉威尔的朗斯瓦雷帕吉纳托班工作。我的问题是我不能使用 $users=DB::table('users')->paginate(15) 或者换句话说,拉威尔的querybuilder或雄辩的结果。原因是我为用户提供了一个前端,用户可以在其中动态创建查询,查询可以像选择查询一样简单,也可以像具有多个连接的查询一样复杂。因此,我只能选择使用LengthAwarePaginator。以下是我迄今为止所做的工作 private function queryWithPagination($querySt

我在拉威尔的朗斯瓦雷帕吉纳托班工作。我的问题是我不能使用

$users=DB::table('users')->paginate(15)

或者换句话说,拉威尔的querybuilder或雄辩的结果。原因是我为用户提供了一个前端,用户可以在其中动态创建查询,查询可以像选择查询一样简单,也可以像具有多个连接的查询一样复杂。因此,我只能选择使用LengthAwarePaginator。以下是我迄今为止所做的工作

private function queryWithPagination($queryString,$path,$fieldName = '',$sortOrder = '',$perPage = 100){


    $queryString = str_replace(''',"'",$queryString);
    $queryString = str_replace('**',"",$queryString);

    if(!empty($fieldName) && !empty($sortOrder)){
        $queryString .= " ORDER BY '{$fieldName}' {$sortOrder}";
    }

    $currentPage = LengthAwarePaginator::resolveCurrentPage();  
    $limit = $perPage +1;   // to have pagination links clickable i.e next,previous buttons   
    $queryString.= " LIMIT {$limit}";        

    if($currentPage == 1){
        $queryString.= " OFFSET 0";
    }
    else{
        $offset = ($currentPage-1)*$perPage;
        $queryString.= " OFFSET {$offset}";
    }

    $path = preg_replace('/&page(=[^&]*)?|^page(=[^&]*)?&?/','', $path);

    $result = DB::connection('database')->select($queryString);

    $collection = new Collection($result);
    //$currentPageSearchResults = $collection->slice(($currentPage - 1) * $perPage, $perPage)->all();
    $entries = new LengthAwarePaginator($collection, count($collection), $perPage);
    $entries->setPath($path);
    //dd($queryString,$result);
    dd($entries);
    return $entries;

}

正如您可以看到的,我在查询中附加了LIMIT和OFFSET,否则,对于复杂的查询,加载时间会越来越长,从而导致糟糕的用户体验。当前设置的问题是,最后一页总是设置为2,当我到达第二页时,我无法浏览更多结果,即返回的记录超过500条的情况下,我仍然只能浏览到第2页。我如何解决这个问题,通过使用“限制偏移量”,我仍然可以浏览所有结果,直到到达最后一页,然后禁用分页链接?

在给定代码中为LengthAwarePaginator动态设置了第二个参数,解决了我的问题

$entries=新长度($collection,(count($collection)>=101)?$currentPage*$limit:count($collection),$perPage)


在给定的代码中,将第二个参数设置为LengthAwarePaginator dynamic,如下所示,它解决了我的问题

$entries=新长度($collection,(count($collection)>=101)?$currentPage*$limit:count($collection),$perPage)

您可以使用
forPage()
laravel集合,也可以使用
forPage()
laravel集合