Длина LaravelAwarePagination - PullRequest
       14

Длина LaravelAwarePagination

0 голосов
/ 12 февраля 2019

Я работаю с классом LengthAwarePaginator от laravel.Моя проблема в том, что я не могу использовать

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

или, другими словами, larvel'sпостроитель запросов или красноречивые результаты.Причина в том, что я предоставил пользователю интерфейс, где он может динамически создавать запросы, которые могут быть такими же простыми, как запрос на выборку, и такими же сложными, как запросы с несколькими объединениями и т. Д. Поэтому у меня остается только опция использования 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. Как исправитьв этой проблеме, где с помощью предельного смещения я могу продолжать просматривать все результаты, пока не доберусь до последней страницы, а затем отключу ссылки на страницы?

1 Ответ

0 голосов
/ 12 февраля 2019

сделал второй параметр для LengthAwarePaginator динамическим, как показано ниже в данном коде, это решило мою проблему

$ records = new LengthAwarePaginator ($ collection, (count ($ collection)> = 101)?$ currentPage * $ limit: count ($ collection), $ perPage);

...