Laravel 4 – Как использовать «смещение» вместо «страницы» с помощью Eloquent's -> paginate ()?

Я переношу существующий REST API в Laravel 4.1, и API в настоящее время использует offset как параметр querystring, чтобы указать, что должно быть смещением записей.

Я хотел бы использовать paginate() по умолчанию Eloquent, но они ищут параметр querystring page . И, конечно, он использует номер страницы (например, 2) вместо смещения (например, 200).

Есть ли простой способ настроить функцию paginate в этой ситуации? Или мне нужно использовать функции ->skip() и ->take() и сами сделать ссылки на следующую страницу?

@Anam: Я хочу использовать:

 $warehouses = Warehouse::orderBy('name') ->paginate($perpage); 

Это работает с http://example.org/api/warehouses?page=2 , но я хочу, чтобы это работало с http://example.org/api/warehouses?offset=200

Со смещением я могу использовать:

 $warehouses = Warehouse::orderBy('name') ->skip($offset) ->take($perpage) ->get(); 

Но тогда я не могу использовать тот же контроллер для API и веб-представления. Поэтому я бы предпочел, чтобы кто-то работал первым.

Solutions Collecting From Web of "Laravel 4 – Как использовать «смещение» вместо «страницы» с помощью Eloquent's -> paginate ()?"

Но тогда я не могу использовать тот же контроллер для API и веб-представления. Поэтому я бы предпочел, чтобы кто-то работал первым.

Почему нет? Если вы уже знаете, что ?offset будет доступно на API и ?page в обычном режиме. Просто определите, что найдено и примените его соответствующим образом.


Тем не менее, вы можете получить экземпляр окружения paginator, который использует построитель запросов, и передать ему номер страницы, который вы определяете.

 $perPage = 50; $currentPage = 1; if ($offset = Input::get('offset')) { $currentPage = ($offset / $perPage); } Warehouse::resolveConnection()->getPaginator()->setCurrentPage($currentPage); $warehouses = Warehouse::orderBy('name')->paginate($perpage); 

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