精华内容
下载资源
问答
  • laravel自定义分页数据格式

    千次阅读 2020-07-01 14:42:37
    laravel好几年了, 这次写接口的时候, 突然发现分页数据返回的格式有点杂,而且作为一个api不需要返回这么多用不着的数据, 于是就想着看看能不能改下 { "code": 200, "data": { "current_page": 1, "data": [ ...

    背景

    laravel好几年了, 这次写接口的时候, 突然发现分页数据返回的格式有点杂,而且作为一个api不需要返回这么多用不着的数据, 于是就想着看看能不能改下

    {
        "code": 200,
        "data": {
            "current_page": 1,
            "data": [
                {
                    "id": 1,
                    "name": "技术部",
                    "description": "",
                    "qr_code_path": "http://mag.com/1.jpg",
                    "created_at": "2020-06-24 16:12:43",
                    "updated_at": "2020-06-24 16:12:44"
                }
            ],
            "first_page_url": "http://mag.com/department?page=1",
            "from": 1,
            "last_page": 1,
            "last_page_url": "http://mag.com/department?page=1",
            "next_page_url": null,
            "path": "http://mag.com/department",
            "per_page": 10,
            "prev_page_url": null,
            "to": 1,
            "total": 1
        },
        "message": "success"
    }
    

    解决

    寻找发现
    Illuminate\Database\Eloquent\Builder 文件
    在这里插入图片描述
    调用组装分页数据的地方

    随即再跟进Illuminate\Database\Concerns\BuildsQueries

    在这里插入图片描述
    可以看到我用红色标出来是是返回的分页类, 用蓝色标出来是用容器加载的这个类

    继续查找这个类Illuminate\Pagination\LengthAwarePaginator
    发现组装分页数据的是这个类中toArray方法
    在这里插入图片描述
    刚刚上面也说这个分页类是通过容器加载的,那我们只要在容器内重新加载下这个类就行

    于是我先自定义了一个分页类,继承了上面的分页类,并重写了toArray方法
    在这里插入图片描述
    然后在AppServiceProvider容器内重新绑定了这个分页类的实现在这里插入图片描述
    测试一下
    在这里插入图片描述
    完美解决

    总结

    主要还是用到了类的重写和容器, 没啥特别复杂的操作

    展开全文
  • laravel自定义分页LengthAwarePagi…

    千次阅读 2017-02-23 17:29:47
    场景:我调用接口 传入分页大小等数据,接口返回总数的和列表 demo 链接:http://www.jb51.net/article/94243.htm use Illuminate\Pagination\LengthAwarePaginator; use Illuminate\Pagination\Paginator; ...
    场景:我调用接口 传入分页大小等数据,接口返回总数的和列表

    demo   链接:http://www.jb51.net/article/94243.htm

    
    
    use Illuminate\Pagination\LengthAwarePaginator;
    use Illuminate\Pagination\Paginator;
    use Illuminate\Http\Request;
    # 仅做演示 #
    public 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'));
    }
    
    本场景代码
    public function index(Request $request){
    $paginator =new LengthAwarePaginator([], 100,5, 1, [
    'path' => Paginator::resolveCurrentPath(), //注释2
    'pageName' => 'page',
    ]);
    echo $paginator->appends(['sort' => 'votes'])->render();
    exit;
    
    
    展开全文
  • 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 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 请求 ...

    后台接口

    namespace App\Http\Controllers;
    
    use App\Show;
    use Illuminate\Http\Request;
    
    class ShowController extends Controller
    {
        //
        public function index(Request $request){
        //判断是不是ajax 请求
            if (request()->ajax()) {
                $data = Show::paginate(5)->toArray();
                return $data;
            } else {
               $data = Show::paginate(5)->toArray();
               return view('show.index',compact('data'));
            }
    
        }
        public function del(Request $request){
          
        	$ids =$request->id;  //接过来传过来的id字符串
        	$data = explode(',', $ids);//字符串分割数组
        	Show::destroy($data);  //使用函数destroy 批量删除   注意数据库字段的 是 id   否则删除失败 
        	$data = Show::paginate(5);
            return $data;
        }
    
    }
    

    返回的数据
    在这里插入图片描述

    <!doctype html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport"
              content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
        <meta http-equiv="X-UA-Compatible" content="ie=edge">
           <link rel="stylesheet" href="http://apps.bdimg.com/libs/bootstrap/3.3.0/css/bootstrap.min.css">
           <script src="http://apps.bdimg.com/libs/jquery/2.1.1/jquery.min.js"></script>
           <script src="http://apps.bdimg.com/libs/bootstrap/3.3.0/js/bootstrap.min.js"></script>
    
        <title>Document</title>
    </head>
    <body  align="center">
     <table  align="center">
      <thead>
     	<tr>
     		<td></td>
     		<td>id</td>
     		<td>名称</td>
     		<td>数量</td>
     		<td>价格</td>
     	</tr>
      </thead>
      <tbody id='tbody'>
     	@foreach ($data['data'] as $v)
    
     	<tr>
     		<td><input type="checkbox" name="box" value="{{ $v['id'] }}"></td>
     		<td>{{ $v['id']}}</td>
     		<td>{{ $v['cart_name']}}</td>
     		<td>{{ $v['num']}}</td>
     		<td>{{ $v['price']}}</td>
     	</tr>
        @endforeach
         </tbody>
     </table>
     <div id="fen">
     <a path="{{$data['first_page_url']}}" class="page">首页</a>
     <a path="{{$data['prev_page_url']}}" class="page" >上一页</a>
     <a path="{{$data['next_page_url']}}" class="page" >下一页</a>
     <a path="{{$data['last_page_url']}}" class="page">尾页</a>
     </div>
     <br>
     <button id='pi'>批删</button>
    </body>
    </html>
    
    <script type="text/javascript">
       $(document).on('click','.page',function(){
        var path = $(this).attr('path');
        console.log(path);
        $.get(path,function(res){
            console.log(res);
            str = "";
            arr = "";
            $.each(res.data,function(k,v){
              str += "<tr>";
              str += '<td><input type="checkbox" name="box" value=" ' + v.id + '"></td>';
              str += "<td>"+ v.id + "</td>";
              str += "<td>"+ v.cart_name + "</td>";
              str += "<td>"+ v.num + "</td>";
              str += "<td>"+ v.price + "</td>";
              str += "</tr>";
            })
            arr += '<a path="'+res.first_page_url+'" class="page">首页</a>';
            arr += '<a path="'+res.prev_page_url+'" class="page">上一页</a>';
            arr += '<a path="'+res.next_page_url+'" class="page">下一页</a>';
            arr += '<a path="'+res.last_page_url+'" class="page">尾页</a>';
            $('#tbody').html(str);
            $('#fen').html(arr);
        })
    
    
    
    
       })
    
    
    
    
    
    
    	 $("#pi").on("click", function(){
        var ids ="";
    	    $("[name=box]:checked").each(function() {
              ids += ',' + $(this).val();
           });
          ids = ids.substr(1);
          var url = "{{route('show.del') }}"
          $.get(url,{id:ids},function(res){
            console.log(res);
            str = "";
            $.each(res.data,function(k,v){
              str += "<tr>";
              str += '<td><input type="checkbox" name="box" value=" ' + v.id + '"></td>';
              str += "<td>"+ v.id + "</td>";
              str += "<td>"+ v.cart_name + "</td>";
              str += "<td>"+ v.num + "</td>";
              str += "<td>"+ v.price + "</td>";
              str += "</tr>";
            })
            $('#tbody').html(str);
    
          });
    	  });
    
    
    
    
    
    
    </script>
    
    展开全文
  • 基于Laravel5.5 在项目实施过程中,需要对从接口中获取的数据(或者通过搜索工具查询出来的数据)进行分页 一、创建手动分页laravel自带的分页中,一般是通过数据库查询访问paginate()方法来达到分页的效果 ,...
  • Laravel5.5 手动分页和自定义分页样式

    千次阅读 2018-04-10 11:45:33
    基于Laravel5.5 在项目实施过程中,需要对从接口中获取的数据(或者通过搜索工具查询出来的数据)进行分页一、创建手动分页laravel自带的分页中,一般是通过数据库查询访问paginate()方法来达到分页的效果 ,like ...
  • 背景laravel的paginate分页使用起来特别方便,但是如今都是前后端分离,作为api接口,返回的数据就比较杂,不符合laravel优雅的特性,所以我们来改下。{"code": 200,"data": {"current_page": 1,"data": [{"id": 1,...
  • Laravel实现适用于API的分页查询

    千次阅读 2020-06-28 09:50:36
    Laravel自带分页查询方法里有一些多余的数据,并不完美适用于我们用来做API的查询。本文旨在通过重写 paginate 解决分页查询针对API接口的的灵活性和适用性。
  • laravel 实现最最简单的一个分页接口

    千次阅读 2018-12-26 16:19:44
    分页技术 是一种将所有数据分段展示给用户的技术.用户每次看到的不是全部数据,而是其中的一部分,如果在其中没有找到自习自己想要的内容,用户可以通过制定页码或是翻页的方式转换可见内容,直到找到自己想要的内容为止...
  • 原文博客地址https://xgs888.top/post/view?id=89... 前端使用的是vue.js后端使用的是laravel获取到接口的数据, vue-bootstrap-pagination所需要的数据格式记录一下; &lt;divclass='col-lg-5'&gt; ...
  • 简要描述:获取推荐文章列表接口 (按发布时间排序,最新发布的在前面) 请求URL:http://xx.com/api/article/recommend?page=1&numberOfPage=2 请求方式:GET 参数: (1)page 【必填 int 第几页】。(2)...
  • php中文网最新课程每日17点准时技术干货分享推荐一个实用的laravel包...不到一分钟就能写完简单的增删改查特别是对查询的优化,基本不用单独加接口laravel-controller...
  • laravel与Layui-table结合

    2020-07-19 11:33:53
    laravel中paginate(number)是具有分页功能的函数 Layui中 table.render({ elem: '#demo' ,height: 312 ,url: '/demo/table/user/' //数据接口 ,limit:4 ,page: true //开启分页 ,cols: [[ //表头 {field: '...
  • laravel的orderby排序问题

    万次阅读 2018-09-05 12:17:00
    在工作中写APP接口,有一个需求是:分页查询所有涨幅为0的都放最后面,其他数据按要求进行降序或升序排序,在原生的MySQL语句中,可以这么写:order by 字段A=0,字段A;  而在laravel框架中是不予许你这么...
  • laravel 框架想实现一个分页接口,返回数据表中其中一部分字段 $list = DB::table('booklist_table')->orderBy('create_time','asc')->paginate($size,['id','title','author','image'])->toJson(); return json_...
  • laravel paginate查询多个字段报错

    千次阅读 2018-04-17 14:10:35
    laravel 框架想实现一个分页接口,返回数据表中其中一部分字段$list = DB::table('booklist_table')-&gt;orderBy('create_time','asc')-&gt;paginate($size,['id','title','author','image'])-&gt;to...
  • 这段时间学习vue,写了个小博客,后台接口用的laravel,过程中遇到过很多问题,在此总结一下,并附上代码链接:(我还没有买域名,所以大家只看代码就好)... 一、分页 我知道网上有很多写好的分页组件,但是我的初衷...
  • 工作中难免要写非常多的增删改查的逻辑,Laravel的查询构造器写起来已经很舒服了,但是仍然避免不了要写大量的重复代码,比如我们要实现一个最基本的用户模块的管理功能,起码要写下面这么多接口 用户列表接口(分页)...
  • laravel框架sql中groupBy之后排序的问题

    万次阅读 2016-12-26 18:11:13
    最近在用框架给公司App写接口时,碰到了一个棘手的问题: 对查询结果进行排序并进行分页(进行了简略修改),下面是最终结果代码: $example = Example::select(DB::raw('max(id) as some_id,this_id')) ->where...
  • 很纳闷,一个简单的用户列表接口,用户数据才 4k+,还使用了分页,为什么会这么慢呢。经过调试发现是 mysql 执行时间太长。这儿我们模拟两张表和表数据:create table `users` (`id` int(10) unsigned not null auto...
  • 分页实现后端逻辑

    千次阅读 2016-05-04 11:40:15
    由于项目需要,写了个提供给h5,还有客户端的分页接口。而公司使用的框架 laravel 自带的框架paginate套用不方便,因为paginate的分页是原理是在对数据库进行query的时候分页,相当于在sql语句里面多加了几个动态的 ...
  • php iterator接口

    2016-04-28 17:41:00
    laravel中有大量的类实现了Iterator...laravel中实现了该接口的例子有①分页 Illuminate\Pagination\LengthAwarePaginator ②查询构造器返回结果Collection <?php class testsIterator implements \It...
  • Laravel 面向接口编程(实践)_PHP开发框架教程面向接口编程是编码中的一种设计思想,这种方式基于接口而不是固定的类来构建应用程序。 需求多加一个类似phpmyadmin一样的每页显示条数 查了好久都没找到看到thinkphp ...

空空如也

空空如也

1 2
收藏数 34
精华内容 13
关键字:

laravel接口分页