Laravel 自定义分页
Posted
技术标签:
【中文标题】Laravel 自定义分页【英文标题】:Laravel Custom Pagination 【发布时间】:2016-09-21 00:11:29 【问题描述】:在 Laravel 5.2 中让我的分页无法正常工作时,我使用了一个 foreach 来生成一个对象列表,其中每个对象都有一定的排名。 (比赛)
我使用的第一个查询是这个:
$goedeDoelen = GoedDoel::orderBy('punten', 'desc')->simplePaginate(5);
这很好用,唯一的问题是我的排名会重置我会转到不同页面的所有内容。
示例:第 1 页包含 1 - 5 级的对象,第 2 页应具有 6-10 级的对象。通过使用第一个 Paginate 方法,第二个页面将再次具有从 1 开始的对象。
我试图通过将排名作为额外属性添加到我的 Eloquent 集合中来解决此问题。
$ranking = GoedDoel::orderBy('punten', 'desc')->get();
foreach($ranking as $key => $item)
$item->ranking = $key+1;
之后,我尝试在更新的集合上使用 ->simplePaginate()。这给出了一个错误。
我创建了一个自定义分页器。
$goedeDoelen = new Paginator($ranking, 5);
这没有按预期工作。当我转到我的第二页时,URL 混乱并转到另一个视图。
我如何确保分页器知道我当前的 URL 是什么,它必须应用 ?page=2
【问题讨论】:
这个问题你解决了吗?因为我有同样的问题 【参考方案1】:以下代码说明了 Laravel 中的手动分页
样品控制器
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Pagination\LengthAwarePaginator as Paginator;
use App\Models\UserRechargeDetails;
class PaginateController extends Controller
//
public function index(Request $request)
$user_1 = new UserRechargeDetails;
// Get records from Database
$items = $user_1->all();
// Store records in an array
$records = [];
$i = 0;
foreach($items as $item)
$records[$i][0] = $item->user_name;
$records[$i][1] = $item->rech_mobile;
$i++;
// Current page for pagination
$page = $request->page;
// Manually slice array of product to display on page
$perPage = 2;
$offset = ($page-1) * $perPage;
$data = array_slice($records, $offset, $perPage);
// Your pagination
$final_data = new Paginator($data, count($records), $perPage, $page, ['path' => $request->url(),'query' => $request->query(),]);
/*
For Display links, you may add it in view page
$data->links('pagination::bootstrap-4')
*/
return view('admin.pagination_new', ['data' => $final_data, 'j' => 1]);
【讨论】:
【参考方案2】:您需要使用paginate() 方法。
$goedeDoelen = GoedDoel::orderBy('punten', 'desc')->paginate(5);
!! $goedeDoelen->links() !!
【讨论】:
我试过这个。我知道这行得通。我试图实现的是向我的集合添加一个属性,然后对更新的集合进行分页。以上是关于Laravel 自定义分页的主要内容,如果未能解决你的问题,请参考以下文章