Laravel Yajra DataTable 列排序不正常

Laravel Yajra DataTable Column Sorting not proper working

Laravel Yajra DataTable 列排序不正常。如果我在 Query 中使用 ->get() 函数,那么 DataTable 排序工作正常。但是我不想使用 get() 函数,因为如果我有超过 100 000 条记录,那么它会花费太多时间,所以我不想在查询中使用 get()

这是我的控制器代码

   $deals = Deal::orderBy('updated_at', 'desc');

   $searcharray = array();     
   parse_str($request->fromValues,$searcharray);
   
    if(isset($searcharray) && !empty($searcharray)){
        
         if($searcharray['filtertype'] !=''){        
             $deals->where("deal_isApproved",'=',$searcharray['filtertype']);
        }
    }

    $detail_data = $deals;
    
    // print_r($deals);
    return Datatables::of($detail_data)
    ->addColumn('action', function ($data) {
    $btn .= '<a class="dropdown-item" href="'.route('admin.deals.edit',$data->id).'" style="color: black;" onmouseover=\'this.style.background="#dee2e6"\' onmouseout=\'this.style.background="none"\'><i class="far fa-edit text-primary"></i> Edit</a>';
    $btn .= '<a deal_id="'.$data->id.'" class="dropdown-item deleteDeal" href="#" style="color: black;" onmouseover=\'this.style.background="#dee2e6"\' onmouseout=\'this.style.background="none"\'><i class="far fa-trash-alt text-danger"></i> Delete</a>';
    return $btn;
    })

->rawColumns(['action'])
->make(true);

这是我在 blade 文件中初始化的数据表

var dataTable = $('#example_laravel').DataTable({
    //lengthMenu: getPageLengthDatatable(),
    processing: true,
    serverSide: true,
    order: [],
    searchDelay: 500,
    "scrollX": "auto",
    // responsive: true,
    // // "responsive": true,
    // "lengthChange": false,
    // "autoWidth": false,
    ajax: {
        url: '{{ route("admin.deals.filter")}}',
        type: 'post',
        headers: {
          'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
      },
      data: function (data) {
            data.fromValues = $("#filterdealtype").serialize();
        },
    },
    columns: [
        {data: 'SrNo', //try with data: 'SrNo' OR data: 'id',
            render: function (data, type, row, meta) {
                // return meta.row + meta.settings._iDisplayStart + 1;
                return meta.row + 1;
            }, searchable: false, sortable: false
        },
        {data: 'deal_title', name: 'deal_title'},
        {data: 'deal_desc',
            render: function (data, type, row, meta) {
                var data = decodeHTMLEntities(data);
                var data = data.replaceAll("href=\"","href=\"http://");
                return '<div style="width: 340px; word-wrap: break-word;">'+data+'</div>';
            },
        },
        {data: 'deal_price', name: 'deal_price'},
        {data: 'deal_retail_price', name: 'deal_retail_price'},
        {data: 'deal_percent_off', name: 'deal_percent_off'},
        {data: 'deal_img',
            render: function (data, type, row, meta) {
                if(data){
                    return '<img id="myImg" src="{{ asset('') }}'+data+'" height="100px" width="100px">'; 
                }else{
                    return ''; 
                }
            }
        },
        {data: 'deal_start_date', name: 'deal_start_date'},
        {data: 'action', name: 'action', searchable: false, sortable: false},
    ],
});

我得到的输出如下图所示

我解决了另一个与排序相关的问题...我分享这个答案以帮助其他人,

实际上,当我在控制器中定义 orderby 时,当我点击 Datatable 列进行排序时,它没有排序,因为当我们点击列时,它不是传递两次不同的不同 orderby 字段,所以它不起作用,

题解

$deals = Deal::select('*');
if($request->order ==null){
    $deals->orderBy('created_at', 'desc');
}

& 由于数据库中的数据类型错误而导致数据排序顺序错误的另一个问题 table...

所以,请同时验证数据库的数据类型

希望对你有所帮助... &感谢你@ibrahim-dogan 这个人回答我关于错误数据类型的问题...... 谢谢