如何对Laravel 5.3数据库通知进行分页

时间:2016-09-07 07:08:18

标签: php laravel laravel-5.3

我们知道Laravel 5.3中的通知可以通过多个渠道发送,并可以存储在数据库中。

我们知道可以获取用户的所有通知并显示如下:

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

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

但假设我有一个AllNotifications页面,显示用户的所有通知,我想分页。

有没有办法对通知进行分页?

更新
根据{{​​3}}我尝试了代码:

  

您可以使用$ user-> notifications() - > paginate(),.   HasDatabaseNotifications trait具有常规的morphMany关系。

第一个问题已经解决但是又出现了另一个问题。

我有三个notif并使用$user->notifications()->paginate(2),然后页面链接显示在第一页上但它没有显示在第二页中,在这种情况下我无法导航到其他页面。为什么呢?

注意:我发现上面的问题不在 Laravel 5.3.4 但是 5.3.6

2 个答案:

答案 0 :(得分:3)

试试这个:

$page = 2; /* Actual page */

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

\Auth::user()->notifications()->offset($page*$limit)->limit($limit)->get();

答案 1 :(得分:0)

我在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 Resources

$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
}