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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 14:18:26