Как разбить на страницы уведомления базы данных Laravel 5.3

Мы знаем, что уведомления в Laravel 5.3 могут отправляться по многим каналам и храниться в базе данных.

И мы знаем, что он может получить все уведомления пользователя и показать их следующим образом:

 $user = App\User::find(1);

foreach ($user->notifications as $notification) {
    echo $notification->type;
}

Но предположим, что у меня есть страница AllNotifications, на которой отображаются все уведомления пользователя, и я хочу разбить ее на страницы.

Есть ли способ разбивать уведомления на страницы?

Обновление:
Согласно themsaid< /strong> ответ на github Я попробовал код:

Вы можете использовать $user->notifications()->paginate(), трейт HasDatabaseNotifications имеет обычное отношение morphMany.

Первая проблема решена Но возникла другая проблема.

У меня есть три уведомления и я использовал $user->notifications()->paginate(2), тогда ссылки на страницы отображаются на первой странице, но не отображаются на второй странице, и в этом случае я не мог перейти на другие страницы. Почему?

Примечание: я обнаружил, что описанная выше проблема не в Laravel 5.3.4, а в 5.3.6


person A.B.Developer    schedule 07.09.2016    source источник
comment
Как вы отображаете уведомления?   -  person Dissident Rage    schedule 06.01.2017


Ответы (2)


Попробуй это:

$page = 2; /* Actual page */

$limit = 4; /* Limit per page*/

\Auth::user()->notifications()->offset($page*$limit)->limit($limit)->get();
person Jefferson Javier    schedule 11.04.2017

Я пробую это в V 5.5.*, у меня работает:

$perpage =  $request->input('perpage', 15);

$page =  $request->input('page', 1);

return $user->notifications()->paginate($perpage, ['*'], 'page', $page);

Результат:

"data": [],
"links": {
    "first": "http://domain.test/notification?page=1",
    "last": "http://domain.test/notification?page=2",
    "prev": "http://domain.test/notification?page=1",
    "next": null
},
"meta": {
    "current_page": 2,
    "from": 4,
    "last_page": 2,
    "path": "http://domain.test/notification",
    "per_page": "3",
    "to": 4,
    "total": 4,
}

Дополнительно: если вы хотите добавить непрочитанные Eloquent: ресурсы API< /а>

$notification = $user->notifications()->paginate($perpage, ['*'], 'page', $page);

return NotificationResource::collection($notification)->additional(['meta' => [
                                    'unread' => $user->unReadNotifications->count(),
                                ]]);

Результат:

"data": [],
"links": {},
{
    "meta": {
    "current_page": 2,
    "from": 4,
    "last_page": 2,
    "path": "http://domain.test/notification",
    "per_page": "3",
    "to": 4,
    "total": 4,
    "unread": 4 // here
}
person C.V    schedule 31.08.2018