Laravel 5 - Eloquent - Paginate结果

时间:2015-05-07 08:03:26

标签: php pagination laravel-5

我使用Laravel 5作为我的项目,我有这个功能来对结果进行分页:

return $query->approvate()->with( 'voti' )->get()->sortBy( function ( $sort )
{
    return $sort->voti->count();
}, 0, true );

我尝试使用paginate(),但我需要在分页之前订购该集合的结果。

在Laravel 4中,Laravel 5中删除了这种方法:

$paginator = Paginator::make($items, $totalItems, $perPage);

如何在订购后对L5中的结果进行分页?

1 个答案:

答案 0 :(得分:2)

Laravel无法对一个集合进行分页,但我写了一个帮助器,所以你仍然可以这样做。

试试这段代码:

<?php
namespace Helpers;
use Illuminate\Support\Facades\Input;

class Paginator extends \Illuminate\Database\Eloquent\Collection {

private $pageNr;
private $perPage;
private $all;

public function paginate($perPage)
{
    $this->perPage = (int) $perPage;
    $this->pageNr = (int) $this->getCurrentPage();

    $this->all = $this->all();
    $this->items = array_slice($this->all(), $this->getCurrentPage()*$perPage-$perPage, $this->perPage);
    return $this;
}

public function getCurrentPage()
{
    $input = Input::get('page');
    if($input==null)
        return 1;
    return $input;
}

public function getLastPage()
{
    return(intval(ceil(count($this->all)/$this->perPage)));
}

public function getUrl($page)
{
    return url('zoeken?page='.$page);
}

}

您可能需要更改getUrl函数。

用法:

$paginator = new \Helpers\Paginator(Collection $col);
$paginator->paginate(int $x);