请问 Laravel 搭配 Bootstrap-table 如何实现服务器分页?

我在学习Laravel + bootstrap-table的时候发现无法服务器分页,调整每页显示条目数和点击其他页码均无法翻页和改变条目数,百度谷歌发现没有Laravel + bootstrap-table搭配的相关资料。

主要问题:
  1. 不知道控制器如何接受js传的参数(我写的bootstrap-table传参的方式不知道是否正确)
  2. 我尝试了paginate()发现生成的JSON输出失败
贴一下代码
html
@section('content')

  <div class="row">
    <div class="col-12">
      <div class="card">
        <div class="card-body">
          {{--<h4 class="card-title">Default Table</h4>--}}
          <div class="table-responsive">
            <table id="field_instrument_ledgers_table"></table>
          </div>
        </div>
      </div>
    </div>
  </div>

@endsection
JS
<script>
    $("#field_instrument_ledgers_table").bootstrapTable({ // 对应table标签的id
      url: "{{ route('field_instrument_ledgers.data') }}", // 获取表格数据的url
      toolbar: '#toolbar',                //工具按钮用哪个容器
      showRefresh: true,                  //是否显示刷新按钮
      showColumns: true,                  //是否显示所有的列
      showToggle:true,                    //是否显示详细视图和列表视图的切换按钮
      clickToSelect: true,                //是否启用点击选中行
      search: true,                       
      method: 'post',
      cache: false, // 设置为 false 禁用 AJAX 数据缓存, 默认为true
      striped: true,  //表格显示条纹,默认为false
      pagination: true, // 在表格底部显示分页组件,默认false
      pageList: [10, 20], // 设置页面可以显示的数据条数
      pageSize: 10, // 页面数据条数
      pageNumber: 1, // 首页页码
      sidePagination: 'server', // 设置为服务器端分页
      queryParams: function (params) { 
          return {
              pageSize: params.limit, // 每页要显示的数据条数
              offset: params.offset, // 每页显示数据的开始行号
              sort: params.sort, // 要排序的字段
              sortOrder: params.order, // 排序规则
          }
      },
      sortName: 'id', // 要排序的字段
      sortOrder: 'desc', // 排序规则
      columns: [
          {
              checkbox: true, // 显示一个勾选框
              align: 'center' // 居中显示
          }, {
              field: 'unit', // 返回json数据中的name
              title: '单元', // 表格表头显示文字
              width:500,
          }, {
              title: "操作",
              width: 100, // 定义列的宽度,单位为像素px
              formatter: function (value, row, index) {
                  return '<button class="btn btn-primary btn-sm" onclick="del(\'' + row.stdId + '\')">删除</button>';
              }
          }
      ],
      onLoadSuccess: function(){  //加载成功时执行
            console.info("加载成功");
      },
      onLoadError: function(){  //加载失败时执行
            console.info("加载数据失败");
      },
      onDblClickRow: function (row) {
        var details = layer.open({
          type: 2,
          title: '查看详情',
          maxmin: true, //开启最大化最小化按钮
          area: ['70%', '70%'],
          content: '/field_instrument_ledgers/' + row.id,
        });
        layer.full(details);
      }

    })
  </script>
控制器
public function data(Request $request)
    {
        $query = new FieldInstrumentLedger();
        $res = $query->paginate($request->get('limit', 5))->toArray();
        $data = [
            'total' => $res['total'],
            'rows' => $res['data']
        ];
        return response()->json($data)->setEncodingOptions(JSON_UNESCAPED_UNICODE);
    }
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
最佳答案

@HG_Gang 感谢帮忙回答问题,经过2天的研究终于处理好了手动分页的问题,分享一下代码:

控制器
public function data(Request $request)
    {
        //每页显示多少条数据
        $limit = $request->get('pageSize',5);
        //从第几条数据开始,数据库是从0开始计数
        $offset = $request->get('offset',5);
        //数据总数
        $count=FieldInstrumentLedger::count();

        $query = new FieldInstrumentLedger();

        $res = $query->offset($offset)->limit($limit)->get()->toArray();
        $data = [
            'total' => $count,
            'rows' => $res
        ];
        return response()->json($data)->setEncodingOptions(JSON_UNESCAPED_UNICODE);
    }
补充一下相关资料

一、offset,limit (offset 设置从哪里开始,limit 设置想要查询多少条数据)

Model::offset(0)->limit(10)->get();

二、skip,take (sikip 跳过几条,take取多少条数据)

Model::skip(3)->take(3)->get();
相关资料链接

https://blog.csdn.net/sqlquan/article/deta...
https://blog.csdn.net/weixin_33908217/arti...

代码写的可能不够优化、严谨,请各位大神指正。。。

4年前 评论
讨论数量: 5

return json_encode ($data);

4年前 评论

@HG_Gang

return json_encode ($data);

和原来的一样,没有格式化(就是那种看起来很美观的格式)

另外想请教一下第一问,我自己解决了当前页显示的条目数量,可是手动分页的问题依然困扰。

4年前 评论

截点儿图上来看看问题啊

4年前 评论

@HG_Gang 感谢帮忙回答问题,经过2天的研究终于处理好了手动分页的问题,分享一下代码:

控制器
public function data(Request $request)
    {
        //每页显示多少条数据
        $limit = $request->get('pageSize',5);
        //从第几条数据开始,数据库是从0开始计数
        $offset = $request->get('offset',5);
        //数据总数
        $count=FieldInstrumentLedger::count();

        $query = new FieldInstrumentLedger();

        $res = $query->offset($offset)->limit($limit)->get()->toArray();
        $data = [
            'total' => $count,
            'rows' => $res
        ];
        return response()->json($data)->setEncodingOptions(JSON_UNESCAPED_UNICODE);
    }
补充一下相关资料

一、offset,limit (offset 设置从哪里开始,limit 设置想要查询多少条数据)

Model::offset(0)->limit(10)->get();

二、skip,take (sikip 跳过几条,take取多少条数据)

Model::skip(3)->take(3)->get();
相关资料链接

https://blog.csdn.net/sqlquan/article/deta...
https://blog.csdn.net/weixin_33908217/arti...

代码写的可能不够优化、严谨,请各位大神指正。。。

4年前 评论

额,我没有帮到什么忙,你现在的这种写法 我之前用 EasyUI 的 DataGrid 也是这样的,我看到你用 bootstrapTable 分页,让我联想到了 ElementUI 的分页,我们前端 使用 ElementUI 分页 后端也是 使用 paginate 分页 方法,我看到 前端也能分页,而且效果蛮好,所以我在想 ElementUI的分页 使用 paginate 方法 可行,为何 bootstrapTable 分页 使用 这个 paginate 就不行。所以也没及时回复你. :yum: :yum: :yum:

4年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!