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