Laravel пагинация

Как реализовать пагинацию в Laravel 8, чтобы в адресной строке было: mysite.com/page/1, а не ?page=1?

Сейчас контроллер выглядит следующим образом:

    <?php


    namespace App\Http\Controllers;

    use Illuminate\Http\Request;
    use Illuminate\Pagination\Paginator;
    use Illuminate\Pagination\LengthAwarePaginator;

    use App\Models\Goods as Items;

    class Goods extends Controller {

        public function index() {

            //  Список всех товаров
            $goods = Items::leftJoin('categories', function($item) {
                $item->on('goods.good_category', '=', 'categories.category_id');
            })->get();

            //  Количество товаров на странице
            $perPage = 10;

            //  Указатель на текущую страницу
            $currentPage = LengthAwarePaginator::resolveCurrentPage();

            //  Создание экземпляра пагинатора
            $pagination = new LengthAwarePaginator($goods, sizeof($goods), $perPage, $currentPage);

            //  Устанавливаем ссылку
            $pagination->setPath('page');

            //  Получаем коллекцию записей с постраничным отображением
            $goods = $pagination->getCollection();

            //  Отдаем данные в представление
            return view('goods', ['goods' => 'goods']);

        }
    }

В шаблоне пытаюсь выполнить следующий код:

{{ $goods->render() }}

И получаю ошибку: Method Illuminate\Database\Eloquent\Collection::render does not exist.


Ответы (1 шт):

Автор решения: saqo

Нужно добавить роут

Route::get('page/{page}', [...])

а в самом методе использовать запросы take и offset в зависимости от page

→ Ссылка