You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用wenzhixin插件在bootstrap table中适配Laravel分页返回数据

问题根因
  • 路由请求方法与Bootstrap Table默认请求方法不匹配:你配置的路由是POST类型,Bootstrap Table默认用GET请求拉取data-url数据
  • 分页字段映射不匹配:Bootstrap Table默认要求列表数据放在rows字段、总记录数放在total字段,而Laravel分页器默认把列表放在data字段、总记录数放在total字段,字段对应不上导致无法识别数据
解决方案

方案1:前端调整配置(推荐,无侵入不改动后端逻辑)

直接修改Bootstrap Table的初始化配置,自定义字段映射和请求方法即可,不需要改后端代码:

如果你用data-*属性初始化表格:

<table
  data-url="/student-statement"
  data-method="post" <!-- 匹配后端POST路由 -->
  data-pagination="true"
  data-data-field="data" <!-- 指定列表数据从返回的data字段取 -->
  data-total-field="total" <!-- 指定总记录数从返回的total字段取 -->
  data-page-size="10" <!-- 和后端paginate(10)的参数保持一致 -->
>
  <!-- 你的列配置 -->
</table>

如果你用JS初始化表格:

$('#your-table-id').bootstrapTable({
  url: '/student-statement',
  method: 'post',
  pagination: true,
  dataField: 'data',
  totalField: 'total',
  pageSize: 10
  // 其他原有配置保持不变
})

方案2:后端调整返回结构(适合项目需要统一接口响应格式的场景)

你也可以在后端把Laravel分页结果改成Bootstrap Table默认要求的结构,不需要改前端配置:
修改后的控制器index方法代码:

public function index(){
    $expenses = DB::table('students')
        ->join('statements', 'students.id', '=', 'student_id')
        ->select('student_id', 'students.name', 'tuition', 'graduation', 'other',
            DB::raw('format(tuition+graduation+other,0) as total,
            (students.payback/100)*(tuition+graduation+other) as payback'),
            'paid')
        ->addSelect(DB::raw('(students.payback/100)*(tuition+graduation+other)-paid as balance'))
        ->paginate(10);

    return response()->json([
        'rows' => $expenses->items(),
        'total' => $expenses->total()
    ]);
}

注意:你原有控制器代码的addSelect部分漏写了乘号运算符,原代码(students.payback/100)(tuition+graduation+other)-paid as balance会触发SQL语法错误,上述修正后的代码已经补全了乘号。

内容的提问来源于stack exchange,提问作者omoding mike

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.08 07:48:03