Laravel Paginator总是在每页上返回完整列表

时间:2015-07-30 20:47:26

标签: laravel paginator

我不能再使用paginate() - 方法了,因为我需要为我的集合中的每个元素添加一个额外的属性。 结果是我在渲染时获得了正确的分页,但它始终显示每个页面上的所有元素。

public function allPaginate($perPage)
{
    $initialCollection = $this->model->orderBy('created_at', 'desc')->get();

    // adding slug to my collection for every item
    $initialCollection->each(function ($item) {
        if(! isset($item->slug))
        {
            $slug = Str::slug($item->title);
            $item->slug = $slug;
        }
    });

    $result = new Paginator($initialCollection, count($initialCollection), $perPage);
    $result->setPath(Request::url());

    return $result;
}

在我刚使用之前:

$paginator = $this->model->orderBy('created_at', 'desc')->paginate($perPage);

我的数据库中有3个元素,我希望每页显示2个元素。以下是两个版本的转储。

应该是(使用 - > paginate())在集合中有2个项目

LengthAwarePaginator {#362▼

#total:3

#lastPage:2

#items:Collection {#364▼

#items: array:2 [▼

  0 => News {#365 ▶}

  1 => News {#366 ▶}

]

}

#perPage:2

#cPage:1

#path:“http://jv.app/nl/nieuws/

#query:[]

#fragment:null

#pageName:“page”

}

现在(使用新的Paginator :: make())在集合中有3个项目

LengthAwarePaginator {#358▼

#total:3

#lastPage:2

#items:Collection {#368▼

#items: array:3 [▼

  0 => News {#369 ▶}

  1 => News {#370 ▶}

  2 => News {#371 ▶}

]

}

#perPage:2

#cPage:1

#path:“http://jv.app/nl/nieuws

#query:[]

#fragment:null

#pageName:“page”

}

这里有什么问题?

1 个答案:

答案 0 :(得分:3)

Laravels Paginator类希望传递当前页面的记录。

首先,您需要获取当前页面的值。然后,您需要更改查询以仅获取当前页面的记录:

// Get current page number
$page = 'Get this from the query string';

// Calculate the offset for current page
$offset = $perPage * ($page - 1);

// Get the records for the current page
$initialCollection = $this->model->orderBy('created_at', 'desc')->
                            skip($offset)->
                            take($perPage)->
                            get();

// Get total number of records in table
$totalRecords = $this->model->count();

// Paginate
$result = new Paginator($initialCollection, $totalRecords, $perPage);