【问题标题】:Laravel Collection paginate does not existLaravel Collection 分页不存在
【发布时间】:2021-09-15 11:24:14
【问题描述】:

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

方法 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);
    }
}

【问题讨论】:

  • 那种Collection没有paginate方法,但是你可以使用helper function来实现。
  • 使用$notifications = auth()->user()->unreadNotifications()->paginate(5);。如果您在 modal 中定义了 unreadNotifications 关系,它将分页
  • 方法 Illuminate\Support\Collection::links 不存在。它返回它,我在视图中有 links() ,所以我现在很困惑。我也没有在模型中定义关系,那到底是什么?
  • 你的关系在用户模型中是如何定义的? Scope是如何定义的?
  • 您的 User 模型是否使用 Notifiable 特征?确保 unreadNotifications() 方法返回一个 \Illuminate\Database\Query\Builder 实例以便分页工作。

标签: laravel laravel-pagination


【解决方案1】:

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

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

【讨论】:

  • 我试过了,它返回:Method Illuminate\Notifications\DatabaseNotificationCollection::paginate 不存在。
  • 您是否在您的用户模型中添加了特征? use Illuminate\Notifications\Notifiable; ... use Notifiable 你还需要循环遍历$notifications->items() 而不是foreach ($notifications as $notification) 希望对您有所帮助。
【解决方案2】:

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

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

【讨论】:

  • 我更新了帖子,它返回一个新错误:Method Illuminate\Notifications\DatabaseNotificationCollection::paginate 不存在。
  • 我想您应该在从数据库中检索之前进行分页,这样您就不会将所有这些都拉到仅显示 5 ... 这没有任何意义。因此,您应该使用 user()->unreadNotifications()->paginate(5) 而不是 user()->unreadNotifications->paginate(5) 在查询构建器实例上运行分页
猜你喜欢
  • 2020-10-25
  • 2020-03-22
  • 1970-01-01
  • 2021-04-16
  • 1970-01-01
  • 2021-05-27
  • 2021-09-27
  • 2018-06-17
  • 1970-01-01
相关资源
最近更新 更多