-
2021-12-19 00:43:22
截止至laravel8.75
翻遍laravel 文档都没有找到不生成html,直接让api接口可以用的分页查询,研究
paginate()
的源码才发现里面用了一个forPage()
public function paginate($perPage = 15, $columns = ['*'], $pageName = 'page', $page = null) { $page = $page ?: Paginator::resolveCurrentPage($pageName); $total = $this->getCountForPagination(); $results = $total ? $this->forPage($page, $perPage)->get($columns) : collect(); return $this->paginator($results, $total, $perPage, $page, [ 'path' => Paginator::resolveCurrentPath(), 'pageName' => $pageName, ]); }
用法:
$model = DB::table($this->modelName)->where($map); //如果需要分页 if ($pageSize) { $totalCount = $model->count(); } $fieldList = $this->field ? $this->_getField($this->field) : '*'; $sort = $this->sort?:$this->pk; $select = $model->select($fieldList)->orderBy($sort , $this->order); if ($pageSize) {//分页 $select->forPage($page,$pageSize); } $rows = $select->get()->toArray();
更多相关内容 -
laravel paginator 接口使用分页/自定义分页
2019-04-30 17:30:48laravel paginator接口使用分页/自定义分页在使用laravel开发后端接口时,需要分页。但是paginator()无法传递当前页面值,只能传一个展示条数; 在使用laravel开发后端接口时,需要分页。但是paginator()无法...laravel paginator接口使用分页/自定义分页
在使用laravel开发后端接口时,需要分页。但是paginate()无法传递当前页面值,只能传一个展示条数;
查看paginator
Illuminate\Pagination; class Paginator extends AbstractPaginator {}
可以看到继承AbstractPaginator
trait MyPage { protected function page($data = [],$perPage = 10,$page = 1) { $offset = ($page * $perPage) - $perPage; $res = new LengthAwarePaginator(array_slice($data, $offset, $perPage, true), count($data), $perPage, $page); $res = $res->toArray(); return [ //使用array_values去掉索引数组key 'data'=>array_values($res['data']), 'total'=>$res['total'] ]; } }
创建一个trait直接使用LengthAwarePaginator
可以传入$perPage //展示条数 $page //页码
可以看到数据如下
array:2 [ "data" => array:1 [ 0 => array:5 [ "id" => 2 "name" => "test" ] ] "total" => 2 ]
此数据就可供前端使用了
在控制器中class TestController extends Controller { use MyPage; 省略.... public function index(Request $request){ ... $data = User::get()->toArray(); $res = $this->page($data,$perPage,$page); ... }
之后发现这么写挺蠢的,拿到数据再做分页,有问题;
所以更新
use Illuminate\Database\Eloquent\Builder; //把分页应该放到查询里 public function paginate(Builder $query, $page = 1, $perpage = 10, $load = ''){ $skip = ($page - 1)*$perpage; $count = $query->count('*'); $totalPage = $count == 0 ? 0 : (int)ceil($count / $perpage); if($load === ''){ $list = $query->skip($skip)->take($perpage)->get()->toArray(); }else{ $list = $query->skip($skip)->take($perpage)->get()->load($load)->toArray(); } return [ 'data'=>$list, 'total'=>$count, 'totalPage'=>$totalPage, ]; }
控制器里的代码还是差不多
public function list(Request $req){ ... $data = $this->paginate(User::select('*'),$req->page1,$req->perpage); ... }
-
Laravel手动分页实现方法详解
2021-08-06 05:53:22本文实例讲述了Laravel手动分页实现方法。分享给大家供大家参考,具体如下:这里的演示实例基于Laravel的5.2版本在开发过程中有这么一种情况,你请求Java api获取信息,由于信息较多,需要分页显示。Laravel官方提供...本文实例讲述了Laravel手动分页实现方法。分享给大家供大家参考,具体如下:
这里的演示实例基于Laravel的5.2版本
在开发过程中有这么一种情况,你请求Java api获取信息,由于信息较多,需要分页显示。Laravel官方提供了一个简单的方式paginate($perPage),但是这种方法只适用model、查询构建器。
今天说下 给定一个数组如何实现 和paginate方法一样的效果。
查看paginate方法源码
#vendor/laravel/framework/src/Illuminate/Database/Eloquent/Builder.php:480
public function paginate($perPage = null, $columns = ['*'], $pageName = 'page', $page = null)
{
$query = $this->toBase();
$total = $query->getCountForPagination();
$this->forPage(
$page = $page ?: Paginator::resolveCurrentPage($pageName),
$perPage = $perPage ?: $this->model->getPerPage()
);
return new LengthAwarePaginator($this->get($columns), $total, $perPage, $page, [
'path' => Paginator::resolveCurrentPath(),
'pageName' => $pageName,
]);
}
从上面就可以看出,分页的关键就在于LengthAwarePaginator。
LengthAwarePaginator的构造方法。
public function __construct($items, $total, $perPage, $currentPage = null, array $options = [])
{
foreach ($options as $key => $value) {
$this->{$key} = $value;
}
$this->total = $total;
$this->perPage = $perPage;
$this->lastPage = (int) ceil($total / $perPage);
$this->path = $this->path != '/' ? rtrim($this->path, '/') : $this->path;
$this->currentPage = $this->setCurrentPage($currentPage, $this->lastPage);
$this->items = $items instanceof Collection ? $items : Collection::make($items);
}
其实已经很明白了,假如要分页的数组为
[
['username'=>'zhangsan', 'age'=>26],
['username'=>'lisi', 'age'=>23],
['username'=>'wangwu', 'age'=>62],
['username'=>'zhaoliu', 'age'=>46],
['username'=>'wangmazi', 'age'=>25],
['username'=>'lanzi', 'age'=>24],
['username'=>'pangzi', 'age'=>21],
]
共7条数据,每页显示3条,共3页
use Illuminate\Pagination\LengthAwarePaginator;
use Illuminate\Pagination\Paginator;
use Illuminate\Http\Request;
# 仅做演示 #
function userList(Request $request) {
$users = [
['username'=>'zhangsan', 'age'=>26],
['username'=>'lisi', 'age'=>23],
['username'=>'wangwu', 'age'=>62],
['username'=>'zhaoliu', 'age'=>46],
['username'=>'wangmazi', 'age'=>25],
['username'=>'lanzi', 'age'=>24],
['username'=>'pangzi', 'age'=>21]
];
$perPage = 3;
if ($request->has('page')) {
$current_page = $request->input('page');
$current_page = $current_page <= 0 ? 1 :$current_page;
} else {
$current_page = 1;
}
$item = array_slice($users, ($current_page-1)*$perPage, $perPage); //注释1
$total = count($users);
$paginator =new LengthAwarePaginator($item, $total, $perPage, $currentPage, [
'path' => Paginator::resolveCurrentPath(), //注释2
'pageName' => 'page',
]);
$userlist = $paginator->toArray()['data'];
return view('userlist', compact('userlist', 'paginator'));
}
上面的代码中的重点是$item,如果不做注释1处理,得出的是所有7条数据。
注释2处就是设定个要分页的url地址。也可以手动通过 $paginator ->setPath('路径') 设置。
页面中的分页连接也是同样的调用方式:
{{ $paginator->render() }}
好了,基本就是这样,有纰漏的地方欢迎指正!
看看最终效果:
更多关于Laravel相关内容感兴趣的读者可查看本站专题:《Laravel框架入门与进阶教程》、《php优秀开发框架总结》、《smarty模板入门基础教程》、《php日期与时间用法总结》、《php面向对象程序设计入门教程》、《php字符串(string)用法总结》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》
希望本文所述对大家基于Laravel框架的PHP程序设计有所帮助。
时间: 2016-10-07
-
Laravel实现适用于API的分页查询
2020-06-28 09:50:36Laravel自带分页查询方法里有一些多余的数据,并不完美适用于我们用来做API的查询。本文旨在通过重写 paginate 解决分页查询针对API接口的的灵活性和适用性。Laravel实现适用于API的分页查询
Laravel自带分页查询方法里有一些多余的数据,并不完美适用于我们用来做API的查询。本文旨在通过重写 paginate 解决分页查询针对API接口的的灵活性和适用性。
新建BaseModel.php文件,代码如下。
<?php namespace App\Http\Model; use Illuminate\Database\Eloquent\Model; use Illuminate\Pagination\Paginator; class BaseModel extends Model{ public $timestamps = false; //重写分页方法,使其更加匹配API的规范 //考虑到性能问题,通常$columns我们不以*号为值。可传入需要查询的字段替代。这里只做演示。无此要求 public function paginate($perPage = null, $columns = ['*'], $page = null, $pageName = 'page'){ $page = $page ?: Paginator::resolveCurrentPage($pageName); $perPage = $perPage ?: $this->model->getPerPage(); $results = ($total = $this->toBase()->getCountForPagination()) ? $this->forPage($page, $perPage)->get($columns) : $this->model->newCollection(); $pages = ceil($total / $perPage); $result = ['total'=>$total,'current_page'=>$page,'page_size'=>$perPage,'pages'=>$pages,'list'=>$results]; return $result; } }
然后在业务模型继承此类即可,范例如下
<?php namespace App\Http\Model; class MsgBoard extends BaseModel{ protected $table = 'msg_board'; public function getMsgPageList($page,$pageSize){ return $this->paginate($pageSize, ['*'], $page, 'page'); } }
然后在控制器当中屌用即可。范例如下
$page = $request->input('page',1); $pageSize = $request->input('pageSize',12); $msgList = $mMsgBoard->getMsgPageList($page,$pageSize);
-
laravel 实现最最简单的一个分页接口
2018-12-26 16:19:44分页技术 是一种将所有数据分段展示给用户的技术.用户每次看到的不是全部数据,而是其中的一部分,如果在其中没有找到自习自己想要的内容,用户可以通过制定页码或是翻页的方式转换可见内容,直到找到自己想要的内容为止... -
Laravel 8 ORM 分页功能简化
2021-08-11 12:39:34laravel 8 的分页方法在模板开发中挺好用,但是在开发API的时候就有点不太适合 在网上找到一些方法,然后根据自己的需要进行了修改。 我想要的就是以下JSON格式 { "data": [ { "id": 3, "name": "王五", ... -
Laravel Api 自定义分页
2021-07-22 14:24:52Laravel手动分页的方法 use Illuminate\Http\Request; use Illuminate\Pagination\LengthAwarePaginator; public function attendance(Request $request) { $list =Tiption::get()->toArray(); //当前页数 ... -
Laravel自带分页&layui数据表格做分页
2019-08-02 17:52:03Laravel自带分页&layui数据表格做分页Laravel自带分页Layui数据表格做分页 Laravel自带分页 首先放上Laravel自带的分页代码。 控制器代码: <?php namespace App\Http\Controllers; use Illuminate\... -
Laravel 的分页功能 - Laravel 5.6 中文文档
2021-08-08 06:36:34Laravel 的分页器与查询构造器、Eloquent ORM 集成在一起,并提供方便易用的数据结果集分页。分页器生成的 HTML 与 Bootstrap CSS 框架 兼容。基本用法查询构造器分页对数据进行分页有几种方式。 最简单的是在 查询... -
Laravel数据库之分页
2020-11-21 18:11:05Laravel的分页器已与查询生成器和Eloquent ORM集成在一起,并提供了便捷,易于使用的数据库结果分页。 默认情况下,分页器生成的HTML与Tailwind CSS框架兼容; 但是,Bootstrap视图也可用。 2.基本使用 2.1 ... -
laravel自定义分页数据格式
2020-07-01 14:42:37用laravel好几年了, 这次写接口的时候, 突然发现分页数据返回的格式有点杂,而且作为一个api不需要返回这么多用不着的数据, 于是就想着看看能不能改下 { "code": 200, "data": { "current_page": 1, "data": [ ... -
laravel对分页的paginate数据进行变更
2021-06-15 14:13:32因为是写接口,所以分页的数据有些用不到,因此直接取出需要的,另外,前端往往展示是跨表的,对于分页结果还需要进行提取出需要的字段,直接上代码,应该一看都明白了. public function index(Request $request) { $... -
laravel中如何传列表分页接口版本
2021-08-02 04:06:44未封装版本 会补充封装版本的 -
laravel8 利用Datatables实现分页
2021-12-03 19:53:32写入js 4.laravel8 后端代码 实现分页 public function getArticle(Request $request) { //获取到分页开始的位置 $start=$request->get('start'); //获取到分页结束的位置 $length=$request->get('length'); //... -
laravel自定义分页的实现案例offset()和limit()
2021-05-05 10:06:55laravel自定义分页的实现案例offset()和limit()情景:因个人使用layui在开发后台模块,因为layui自带了table模块,是都封装了分页的,并且返回数据格式也是有固定要求的所以我们就不能去使用laravel的快速分页... -
laravel前后端分离项目接口怎么实现排序后分页
2021-09-14 15:02:10我做了一个前后端分离的项目 然后在接口这里需要把数据库里表里的数据先排序 然后进行分页 有没有大佬知道怎么弄 卡了两天了这个 第一次做这个 -
laravel5分页Pagination及扩展
2016-06-16 13:46:38Laravel 分页是很方便的一件事情,相对于...Laravel5默认分页在使用 Laravel 分页功能时,需要配合使用前端框架 Bootstrap 的分页组件,这两者结合甚为紧密。可是由于我的博客分页样式是自定义的,所以 CSS 类选择器 -
laravel 5分页问题5
2016-01-29 10:39:06<p>I'm trying to build a website with laravel and I'm using pagination to show the result of searching. when I click on search button , it works but when I click on the next page of the pagination ,... -
laravel做api接口使用paginate自定义分页数据格式
2021-01-15 17:01:39laravel做api接口使用paginate自定义分页数据格式 背景 解决 背景 laravel的paginate分页使用起来特别方便,但是如今都是前后端分离,作为api接口,返回的数据就比较杂,不符合laravel优雅的特性,所以我们来改下。... -
Laravel+vue+element-ui 实现简单分页
2020-12-25 15:33:16简单记录一下分页操作 element-ui组件 <!--分页--> <el-pagination :page-sizes="[10, 20, 30, 40]" layout="total, sizes, prev, pager, next, jumper" :total="this.total" @current-change=... -
Laravel5.5 手动分页和自定义分页样式
2018-04-10 11:45:33基于Laravel5.5 在项目实施过程中,需要对从接口中获取的数据(或者通过搜索工具查询出来的数据)进行分页一、创建手动分页在laravel自带的分页中,一般是通过数据库查询访问paginate()方法来达到分页的效果 ,like ... -
Laravel5.5 手动分页和自定义分页样式的简单实现
2021-01-03 02:42:24基于Laravel5.5 在项目实施过程中,需要对从接口中获取的数据(或者通过搜索工具查询出来的数据)进行分页 一、创建手动分页 在laravel自带的分页中,一般是通过数据库查询访问paginate()方法来达到分页的效果 ,... -
laravel+vue前后台分离,后台实现分页
2019-05-17 17:27:36转载:https://segmentfault.com/a/1190000011629284 -
laravel中查询构建器里关于分页的两种常用用法
2019-06-17 20:10:30背景:在使用laravel查询构建器之后 关于分页自己常用的两种方法 第一种:只有分页 $sql -> offset($params['start'])->limit($params['length']); 通过偏移(offset)和限制(limit)来实现分页 , ... -
限制Laravel 5分页链接
2015-08-14 13:18:51<p>I have pagination with links [1, 2, 3, 4, 5, 6, 7, 8 ... 99, 100] and how can I change limit to display [1, 2, 3, ...... I have custom paginator class, but I can't find this limit to override in ... -
laravel ajax分页,批删
2019-08-15 11:23:16后台接口 namespace App\Http\Controllers; use App\Show; use Illuminate\Http\Request; class ShowController extends Controller { // public function index(Request $request){ //判断是都ajax 请求 ... -
Laravel搜索的时候分页并携带参数
2017-10-19 15:14:45筛选分页每页的条数:<select class="form-control" id="perPage" name="perPage"> @foreach ( [10,20,30,50] as $e) <option value="{{$e}}" {{ $e==request('... -
LayUI Table组件 + Laravel 实现前端分页显示
2019-02-11 13:57:12首先上效果图: 是不是很熟悉 对,没错就是layui的Table组件 右上角三个 按钮分别是 ...扯回原题,底下的分页什么的 都是Table组件自带的 不用我们自己写 我们需要做的是按照他的需求传值(JSON)就可以了 表... -
关于laravel后台模板laravel-admin select框的使用详解
2020-10-16 06:30:09今天小编就为大家分享一篇关于laravel后台模板laravel-admin select框的使用详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧