Пагинация с использованием модели

Blade Базы данных Запросы Разработка Шаблоны

Автор: ACym.ru - February 5, 2016 2:57 pm

Разбиение контента на страницы в случае использования модели (и прямого обращения к базе заодно)

В интернете полно советов на тему, как сделать пагинацию, в которых копи-пастица код примера с использованием прямого обращения к базе из контролера или маршрутизатора.

Что-то типа такого:

$users = DB::table('users_table')->Paginate(10);
return view('user.index', ['users' => $users]);

Здесь все очевидно: делается выборка из таблицы пользователей, и указывается, по сколько записей на странице мы хотим видеть. В данном случае - 10.

После этого в нужном месте шаблона (в приведенном примере это index.blade.php в папке /views/users) нужно вставить соответствующий код, отвечающий за вывод блока пагинации (опять же для примера вывода данных из таблицы пользователей, т.е. с использованием переменной $users):

{!! $users->render() !!}

Однако, вопрос в том, как сделать то же самое, но с использованием модели, а не обращаясь к базе напрямую.

В этом случае тот же пример будет выглядеть следующим образом:

В контроллере пишем:

$users = Users::paginate(10);
return view('user.index', ['users' => $users]);

В шаблон вставляем тот же самый код вывода строки пагинации:

{!! $users->render() !!}

Если требуется ввести, например, дополнительную сортировку, то делается это следующим образом. Например, выведем пользователей в обратном порядке по их id:

$users = Users::orderBy('id', 'DESC')->paginate(10);
return view('user.index', ['users' => $users]);

В шаблоне код остается тем же самым.

Ну, и, напоследок добавим еще один дополнительный параметр в запрос к модели, чтобы было уже совсем понятно, как это работает. Предположим, в таблице пользователей есть колонка "статус", в которой цифрой "0" отмечаются неактивные пользователи (допустим, еще не прощедшие подтверждения адреса электронной почты), а цифрой "1" - полноценные юзеры.

Вывод только активных пользователей будет выглядеть так:

$users = Users::where('status', '1')->orderBy('id', 'DESC')->paginate(10);
return view('user.index', ['users' => $users]);

Опять же, код вывода пагинации в шаблоне остается прежним.

Удачных разработок!
Заходите на LaraNotes.ru, и оставляйте свои записки по работе с Laravel.

.