Laravel Collection 分页不存在

问题描述

我正在尝试在检索通知时实现基本分页,但出现以下错误

方法 Illuminate\Notifications\DatabaseNotificationCollection::paginate 确实如此 不存在。

public function index()
{
    $messages = collect();
    $notifications = auth()->user()->unreadNotifications->paginate(5);
    foreach ($notifications as $notification) {
        $message = NotificationToMessageFactory::make($notification->type)
            ->toMessage($notification->data);
        $messages->push($message);
    }
}

解决方法

您应该在循环遍历集合之前进行分页,否则当您只需要 5 个时,您将检索与查询匹配的所有记录。像这样:

$messages = collect();
$notifications = auth()->user()->unreadNotifications()->paginate(5);
 
foreach($notifications as $notification) {
    $message = NotificationToMessageFactory::make($notification->type)->toMessage($notification->data);
    $messages->push($message);   
}
,

您必须在查询构建器实例上而不是在集合上调用 paginate()。 正确的语法是:

$notifications = auth()->user()->unreadNotifications()->paginate(5);