Коллекция Laravel 5.7 получает размер и смещение после разбивки на страницы

#laravel #eloquent #pagination #laravel-5.7

#laravel #eloquent #разбивка на страницы #laravel-5.7

Вопрос:

У меня есть разбитая на страницы коллекция, подобная

 Post::where('active', 1)->paginate(10)
  

и я хотел бы получить начальную и конечную позиции текущей части коллекции.
Я имею в виду, что если страница равна 2, а предел страницы равен 10, то начальная позиция равна 11, а конечная позиция равна 20. Мне нужно отобразить текст, подобный продуктам, от 11 до 20 из 284 продуктов. Возможно ли это или нет?

Ответ №1:

Следующие методы вернут нужную вам информацию:

 $pagination = Post::where('active', 1)->paginate(10);

$pagination->firstItem(); // Returns the number of the first item from the current page

$pagination->lastItem(); // Returns the number of the last item from the current page

$pagination->total(); // Returns the total amount of items
  

Вы можете найти все доступные методы здесь.

Если вы преобразуете разбивку на страницы в массив или JSON, он автоматически добавит всю метаинформацию.

Из документов:

JSON из paginator будет содержать метаинформацию, такую как total , current_page , last_page и многое другое. Фактические объекты результата будут доступны через ключ данных в массиве JSON. Вот пример JSON, созданного путем возврата экземпляра paginator из маршрута:

 {
   "total": 50,
   "per_page": 15,
   "current_page": 1,
   "last_page": 4,
   "first_page_url": "http://laravel.app?page=1",
   "last_page_url": "http://laravel.app?page=4",
   "next_page_url": "http://laravel.app?page=2",
   "prev_page_url": null,
   "path": "http://laravel.app",
   "from": 1,
   "to": 15,
   "data":[
        {
            // Result Object
        },
        {
            // Result Object
        }
   ]
}