精华内容
下载资源
问答
  • laravel 分页查询
    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接口使用分页/自定义分页在使用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手动分页实现方法。分享给大家供大家参考,具体如下:这里的演示实例基于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() }}

    好了,基本就是这样,有纰漏的地方欢迎指正!

    看看最终效果:

    26134ffd389d4080f173d066e76d5475.png

    更多关于Laravel相关内容感兴趣的读者可查看本站专题:《Laravel框架入门与进阶教程》、《php优秀开发框架总结》、《smarty模板入门基础教程》、《php日期与时间用法总结》、《php面向对象程序设计入门教程》、《php字符串(string)用法总结》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》

    希望本文所述对大家基于Laravel框架的PHP程序设计有所帮助。

    时间: 2016-10-07

    展开全文
  • Laravel实现适用于API的分页查询

    千次阅读 2020-06-28 09:50:36
    Laravel自带分页查询方法里有一些多余的数据,并不完美适用于我们用来做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 的分页方法在模板开发中挺好用,但是在开发API的时候就有点不太适合 在网上找到一些方法,然后根据自己的需要进行了修改。 我想要的就是以下JSON格式 { "data": [ { "id": 3, "name": "王五", ...
  • Laravel Api 自定义分页

    2021-07-22 14:24:52
    Laravel手动分页的方法 use Illuminate\Http\Request; use Illuminate\Pagination\LengthAwarePaginator; public function attendance(Request $request) { $list =Tiption::get()->toArray(); //当前页数 ...
  • Laravel自带分页&layui数据表格做分页

    千次阅读 2019-08-02 17:52:03
    Laravel自带分页&layui数据表格做分页Laravel自带分页Layui数据表格做分页 Laravel自带分页 首先放上Laravel自带的分页代码。 控制器代码: <?php namespace App\Http\Controllers; use Illuminate\...
  • Laravel分页器与查询构造器、Eloquent ORM 集成在一起,并提供方便易用的数据结果集分页分页器生成的 HTML 与 Bootstrap CSS 框架 兼容。基本用法查询构造器分页对数据进行分页有几种方式。 最简单的是在 查询...
  • Laravel数据库之分页

    2020-11-21 18:11:05
    Laravel分页器已与查询生成器和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) { $...
  • 未封装版本 会补充封装版本的
  • 写入js 4.laravel8 后端代码 实现分页 public function getArticle(Request $request) { //获取到分页开始的位置 $start=$request->get('start'); //获取到分页结束的位置 $length=$request->get('length'); //...
  • laravel自定义分页的实现案例offset()和limit()情景:因个人使用layui在开发后台模块,因为layui自带了table模块,是都封装了分页的,并且返回数据格式也是有固定要求的所以我们就不能去使用laravel的快速分页...
  • 我做了一个前后端分离的项目 然后在接口这里需要把数据库里表里的数据先排序 然后进行分页 有没有大佬知道怎么弄 卡了两天了这个 第一次做这个
  • laravel5分页Pagination及扩展

    千次阅读 2016-06-16 13:46:38
    Laravel 分页是很方便的一件事情,相对于...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自定义分页数据格式 背景 解决 背景 laravel的paginate分页使用起来特别方便,但是如今都是前后端分离,作为api接口,返回的数据就比较杂,不符合laravel优雅的特性,所以我们来改下。...
  • 简单记录一下分页操作 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 在项目实施过程中,需要对从接口中获取的数据(或者通过搜索工具查询出来的数据)进行分页 一、创建手动分页laravel自带的分页中,一般是通过数据库查询访问paginate()方法来达到分页的效果 ,...
  • laravel+vue前后台分离,后台实现分页

    千次阅读 2019-05-17 17:27:36
    转载:https://segmentfault.com/a/1190000011629284
  • 背景:在使用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组件 右上角三个 按钮分别是 ...扯回原题,底下的分页什么的 都是Table组件自带的 不用我们自己写 我们需要做的是按照他的需求传值(JSON)就可以了 表...
  • 今天小编就为大家分享一篇关于laravel后台模板laravel-admin select框的使用详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 861
精华内容 344
关键字:

laravel 接口分页