Laravel 手动分页实现详解

因为Laravel 手册上对于手动分页的描述并不详细,这里大概说说笔者的实现方法

场景说明

在写一个大分类下所有文章的列表页时,笔者把取出来的数据都转换成了数组,这里为了清晰的说明并没有使用Repository来进行封装。

/**
* 当parent_id为0时为顶级分类,这时候会把顶级分类
* 下的文章以及子分类下的文章都放到一个数组中
* 当parent_id不为0时取出对应分类下的文章
*/
Cate::find($id)->first()->parent_id == 0 ?
            $listInfo = array_merge(Cate::with('articles')->where('id',$id)->get()->toArray(),
                                    Cate::with('articles')->where('parent_id',$id)->get()->toArray())
            :
            $listInfo = Cate::with('articles')->where('id',$id)->get()->toArray();

因为转换成数组的缘故,不能直接使用paginate()方法来实现分页。

手动实现分页

/**
* ArticleListController.php
* 
*/

<?php

namespace App\Http\Controllers;

use App\Cate;
use Illuminate\Pagination\LengthAwarePaginator;

class ArtlistController extends AppController
{
    public function index($id)
    {
        Cate::find($id)->first()->parent_id == 0 ?
            $listInfo = array_merge(Cate::with('articles')->where('id',$id)->get()->toArray(),
                                    Cate::with('articles')->where('parent_id',$id)->get()->toArray())
            :
            $listInfo = Cate::with('articles')->where('id',$id)->get()->toArray();
        $count = 0;
        foreach ($listInfo as $item) {
                $count += count($item['articles']);
        }
        $paginator = new LengthAwarePaginator($listInfo,$count,4);
        $categories = $this->parent();
        return view('article.list',['categories' => $categories,'listInfo' => $listInfo,'paginator' => $paginator]);
    }
}

以上的关键代码如下

  • $count += count($item['articles']) 把分页数据的总数求出来

  • $paginator = new LengthAwarePaginator($listInfo,$count,4) 这里的参数依次是分页的数据,分页数据的总数,每页多少条。第三个参数可以直接写到conf文件中来灵活调整。

/**
* list.blade.php
*
*/

{!! $paginator->render() !!}

然后是前端模板中的写法。Done!
查看更多,请访问我的博客

                        by vampirebitter
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值