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