Разбиение курсора на PHP с колонкой - PullRequest
0 голосов
/ 08 января 2019

Я использую Laravel version 5.2. Поскольку он имеет большой объем данных, я использую курсор pagiations, как показано ниже в таблице, содержащей поля primary id и name

for page 1 -> select * from table LIMIT 10

For page 2 -> select * from table where id < $lastpagelastementID LIMIT 10

Как и в случае сортировки по столбцу name Как мы можем обработать это cursor pagination?
Есть ли возможность сделать это?

мы можем использовать пагинацию Laravel, как объяснено в

Пагинация Laravel

Но мне нужна пагинация курсора, как указано выше. Может ли кто-нибудь помочь мне найти решение?

Ответы [ 2 ]

0 голосов
/ 08 января 2019

Я думаю, что это может решить вашу проблему. Это пользовательская нумерация страниц

В вашем Blade Просмотр файла:

<!-- pass variable page with a value 
     this generation of your pagination
     should be based to the number of rows
     of your table in the database and not
     static. use foreach for this.
-->
<a href="pagination?page=1">1</a>
...

В вашем контроллере:

public function pagination(Request $request){
    // set the target page to 0 if page is 1 or null
    // else get the value 
    $targetPage = ($request->input('page') == 1 || !$request->input('page')) ? 0 : ($request->input('page') - 1) ;
    $noOfDataToGet = 10;      

    // get the number of data and skip the data based of target page * number of data        
    $tables = Tables::take($noOfDataToGet)->skip($targetPage * $noOfDataToGet)->get();
}

Надеюсь, это поможет

0 голосов
/ 08 января 2019

Вы можете установить этот пакет через композитор, используя:

composer require juampi92/cursor-pagination

Config

Чтобы опубликовать файл конфигурации на config/cursor_pagination.php, запустите:

php artisan vendor:publish --provider="Juampi92\CursorPagination\CursorPaginationServiceProvider" --tag="config"

Как это работает

Основная идея пагинации курсора заключается в том, что ему нужен контекст, чтобы знать, какие результаты будут показаны далее. Поэтому вместо того, чтобы говорить page=2, вы говорите next_cursor=10. Результат аналогичен старомодной нумерации страниц, но теперь у вас есть больше контроля над выводом, потому что next_cursor=10 всегда должен возвращать то же самое (если не удалены некоторые записи).

Плюсы

  • Новые строки не влияют на результат, поэтому дублирование результатов при разбивке на страницы не допускается.
  • Фильтрация с помощью индексированного курсора намного быстрее, чем смещение базы данных.
  • Использование предыдущего курсора, чтобы избежать дублирования первых элементов.

Против

Нет предыдущей страницы, хотя в браузере они по-прежнему есть. Нет перехода к произвольным страницам (вы должны знать предыдущий результат, чтобы знать следующие).

Построитель разбивки на страницы результатов

Существует несколько способов разбиения на страницы. Самый простой способ - использовать метод cursorPaginate в конструкторе запросов или Eloquent запрос . Метод cursorPaginate автоматически устанавливает правильный предел и выбирает следующий или предыдущий элемент на основе курсора, просматриваемого пользователем. По умолчанию cursor определяется значением аргумента строки запроса страницы в HTTP-запросе. Это значение автоматически определяется пакетом с учетом вашей пользовательской конфигурации, а также автоматически вставляется в ссылки и мета-страницы, генерируемые paginator.

public function index()
{
    $users = DB::table('users')->cursorPaginate();
    return $users;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...