Методы Paginate и SimplePaginate
Есть несколько способов разбить элементы на страницы. Самый простой – использовать метод paginate
в построителе запросов или в Eloquent. Метод paginate
автоматически устанавливает «предел» и «смещение» в запросе на основе текущей страницы, просматриваемой пользователем. По умолчанию текущая страница определяется значением аргумента page
строки HTTP-запроса. Это значение автоматически определяется Laravel, а также автоматически вставляется в ссылки, генерируемые пагинатором.
Метод paginate
подсчитывает общее количество записей, соответствующих запросу, перед извлечением записей из базы данных. Это сделано для того, чтобы пагинатор знал, сколько всего страниц с записями необходимо сформировать. Однако, если вы не планируете отображать общее количество страниц в пользовательском интерфейсе вашего приложения, запрос количества записей не нужен.
App/Http/Controllers/UserController.php<?php
namespace App\Http\Controllers;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\DB;
class UserController extends Controller
{
public function index()
{
return view('user.index', [
'users' => DB::table('users')->paginate(15);
]);
}
}
Следовательно, вам нужно отображать только простые ссылки Далее
и Назад
в пользовательском интерфейсе вашего приложения, вы можете использовать метод simplePaginate
для выполнения одного рационального запроса:
App/Http/Controllers/UserController.php<?php
namespace App\Http\Controllers;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\DB;
class UserController extends Controller
{
public function index()
{
$posts = Post::select('posts.*', 'users.name as author')
->join('users', 'posts.author_id', '=', 'users.id')
->orderBy('posts.created_at', 'desc')
->simplePaginate(4);
return view('user.index', compact('users'));
}
}