Eloquent paginate两个关系合并

时间:2018-05-25 12:20:37

标签: laravel pagination eloquent relationship

我有两个模型:任务和评论

在我的用户个人资料中,我想显示按创建日期排序的任务和评论。

为此我做:

$timeline_array = $customer->comments;
$timeline_array = $timeline_array->toBase()->merge($customer->tasks);

//sort timeline event
$timeline_array = $timeline_array->sortByDesc(function($timeline_event){
    return $timeline_event->created_at;
});

我在视野中预测了我的阵列。它的工作正常,但如果我有太多的评论或任务,那将是一个很大的要求,所以我想添加一个分页器。

我该怎么做?

如果我最后有$timeline_array->paginate(5);,我会收到错误:

  

方法Illuminate \ Support \ Collection :: paginate不存在。

而且我认为它并没有解决我的问题,因为我在分页之前加载了所有的评论和任务。

有人有想法/解决方案吗?

2 个答案:

答案 0 :(得分:1)

终于找到了解决方案:

$timeline_array = $customer->comments;
$timeline_array = $timeline_array->toBase()->merge($customer->tasks);

//sort timeline event
$timeline_array = $timeline_array->sortByDesc(function($timeline_event){
  return $timeline_event->created_at;
});

$item_per_page = 10;
$timeline_array = new LengthAwarePaginator($timeline_array->forPage(Paginator::resolveCurrentPage(), $item_per_page), count($timeline_array), $item_per_page, Paginator::resolveCurrentPage(), [
  'path' => Paginator::resolveCurrentPath()
]);

答案 1 :(得分:0)

Paginate方法仅适用于查询构建器或口才, 有人在这里创建了一个要点,你可以在数组或集合上使用paginate:

  

https://gist.github.com/vluzrmos/3ce756322702331fdf2bf414fea27bcb

尝试使用它:

>>> import test_pkg.hidden_module
>>> test_pkg.hidden_module
<module 'test_pkg.hidden_module' from '.../test_pkg/hidden_module.py'>

或者将其作为宏添加到您的App Service Provider中以便更好地练习。