Laravel 9使用Yajra DataTable如何定义DT_RowIndex实现分页行号
Laravel 9 中 Yajra DataTable 适配分页的连续行号实现
你当前代码的核心问题是addIndexColumn调用位置错误,序号列未正确绑定内置的DT_RowIndex字段,按以下两处修改即可实现跨分页自动连续编号,无需使用数据表自身的id字段:
- 修改
dataTable方法,在eloquent链式调用中添加addIndexColumn():该方法会自动根据当前页码、每页展示条数计算序号偏移,翻页后序号不会重置为1,自动保持连续 - 修正
getColumns中的序号列定义,移除错误写在列配置上的addIndexColumn(true),直接绑定虚拟字段DT_RowIndex
修改后的核心代码
修正后的dataTable方法
public function dataTable($query) { return datatables() ->eloquent($query) // 新增该行,自动生成适配分页的连续行序号 ->addIndexColumn() ->editColumn('actions', function ($data) { return "<a href=".route('users.edit', $data->id) . " class='btn btn-primary btn-sm'> Edit </a> <button class='delete btn btn-danger btn-sm' onclick='deleteFunc(". $data->id .")'> Delete </button>"; }) ->rawColumns(['actions']); }
修正后的getColumns方法
protected function getColumns() { return [ Column::make('DT_RowIndex') ->title('no') // 列头显示的名称 ->orderable(false) // 虚拟字段关闭排序 ->searchable(false), // 虚拟字段关闭搜索 Column::make('name'), Column::computed('actions') ->exportable(false) ->printable(false) ->width(200) ->addClass('text-center'), ]; }
注意事项
- 不需要修改
query、html等其他方法的原有逻辑,修改完上述两处即可生效 - 该序号是动态生成的虚拟字段,不会写入数据库,导出、打印功能会自动识别对应序号值
- 如果你自定义了每页条数、分页起始位置,
addIndexColumn()会自动适配计算,不需要手动写偏移计算逻辑
内容的提问来源于stack exchange,提问作者Marc Jamal
相关产品推荐
相关产品推荐

