Paginate Laravel Collection



我有两个不同的查询,合并后返回一个集合

$combinados = $histMe->merge($hist)->sortByDesc('created_at');

我用这种方式退货:

$final = $combinados->all();

但是这打印了所有的收藏品,我怎么能用页码标注呢?paginate((laravel方法不适用于集合。我如何从视图中控制它?

谢谢!

您可以使用我很久以前写的代码:

您必须使用长度感知分页器:

use IlluminatePaginationLengthAwarePaginator;

public function paginate($items, $perPage,$setDefaultOption = true, $options = [])
{
if($setDefaultOption){
$options = ['path' => request()->url(), 'query' => request()->query()];
}
$page = Input::get('page', 1); // Get the current page or default to 1

$items = $items instanceof Collection ? $items : Collection::make($items);
return new LengthAwarePaginator($items->forPage($page, $perPage), $items->count(), $perPage, $page, $options);
}

在较新的版本中,api略有变化。要对集合进行分页,您现在需要使用forPage。

Page的方法采用两个参数:

forPage(int $page, int $perPage)

所以你可以在你的控制器中做这样的事情:

...
public function index(Request $request)
{
$combinados = $histMe->merge($hist)->sortByDesc('created_at');
$combinados->forPage($request->get('page'), 25);
}
...
public function paginate($items, $perPage =1,$setDefaultOption = true, $options = [],$page = null)
{
if($setDefaultOption){
$options = ['path' => request()->url(), 'query' => request()->query()];
}
$page = $page ?: (Paginator::resolveCurrentPage() ?: 1);

$items = $items instanceof Collection ? $items : Collection::make($items);
return new LengthAwarePaginator($items->forPage($page, $perPage), $items->count(), $perPage, $page, $options);
}

public function test(){
$coinUsers = collect([]);
$users = User::role('Customer')->get();
foreach ($users as $user) {
if ($user->balanceFloat > 0) {
$coinUsers->push($user);
}

}
$data = $this->paginate($coinUsers);
return view('test', array(
'users' => $data,
));
}

完美地完成了Laravel 8。请像这个一样尝试

最新更新