Laravel DataTables按created_at排序时isdisabled行置顶问题咨询
解决方法
你遇到的禁用行置顶,打乱created_at排序的问题,核心是前端Datatable的默认排序规则覆盖了后端返回的排序结果,可通过以下两种方式修复:
方法一:修改前端Datatable初始化配置
找到你页面中Datatable的初始化代码,显式指定唯一排序规则,清空默认的额外排序逻辑:
// 替换为你的表格实际ID $('#mediaOrderTable').DataTable({ // 保留你原有其他配置不变 // 明确指定仅按created_at对应的列倒序,注意列索引从0开始计数 order: [[3, 'desc']], // 清空默认的预排序规则 aaSorting: [], // 若你之前在rowCallback中为禁用行添加了排序优先级类,删除相关配置即可 });
方法二:后端强制固定排序,忽略前端排序请求
如果不想修改前端代码,可直接调整控制器中的DataTables返回逻辑,强制所有请求都按created_at倒序返回:
public function index(Request $request) { if ($request->ajax()) { $data = MediaOrder::orderBy('created_at', 'DESC')->get(); return DataTables::of($data) ->addIndexColumn() ->addColumn('action',function($row){ // 原有action代码完全保留,无需修改 $btn = '<a style="margin:5px" href="javascript:void(0)" id="viewMediaOrder" data-toggle="tooltip" data-id="'.$row->id.'" data-original-title="View" class="edit btn btn-primary btn-sm button1 viewMediaOrder" value="{{ csrf_token() }}"><i class="fa fa-eye mr-1"></i>查看</a>'; if(!$row->isdisabled){ $btn = $btn.'<a style="margin:5px" href="javascript:void(0)" id="editMediaOrder" data-toggle="tooltip" data-id="'.$row->id.'" data-original-title="Edit" class="edit btn btn-warning btn-sm button1 editMediaOrder" value="{{ csrf_token() }}"><i class="fa fa-pencil mr-1"></i>编辑</a> <a style="margin:5px" href="javascript:void(0)" data-toggle="tooltip" id="disableMediaOrder" data-id="'.$row->id.'" data-original-title="Delete" class="btn btn-danger btn-sm button1 disableMediaOrder" value="{{ csrf_token() }}"><i class="fa fa-power-off mr-1"></i>禁用</a>'; } return $btn; }) ->rawColumns(['action']) // 新增以下两行配置,强制排序规则不被前端覆盖 ->order(function ($query) { $query->orderBy('created_at', 'desc'); }) ->make(true); } else { // 原有非ajax请求逻辑完全保留即可 \Meta::set('title', 'Media Order'); $groups = Group::all(); $media_order = DB::table('media_order')->get(); $moo = MediaOrder::orderBy('created_at','desc')->get(); $users = User::orderBy('name', 'asc')->get(); return view('media-order.index')->with(compact('users','moo','groups')); } }
额外排查提示
如果以上方法都不生效,检查你是否引入了Datatable的行分组、自定义排序扩展插件,这类插件会自动将带特殊样式类的行置顶,关闭对应插件的优先级排序配置即可。
内容的提问来源于stack exchange,提问作者Vtych
相关产品推荐
相关产品推荐

