【问题标题】:Laravel Yajra DataTable Column Sorting not proper workingLaravel Yajra DataTable 列排序不正常工作
【发布时间】:2021-03-09 07:27:06
【问题描述】:

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);

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

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},
    ],
});

我得到的输出如下图所示

【问题讨论】:

  • 好像是把它们排序成一个字符串,deal_percent_off 的类型是什么?
  • 另外你能写出你的yajra/laravel-datatables的确切版本吗?
  • 是的,我的问题我明白了。问题是数据类型有我设置 varchar 现在我尝试设置 double 然后它工作正常...非常感谢您的回复。

标签: laravel datatable yajra-datatable


【解决方案1】:

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

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

问题的解决方案

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

& 由于DataBase表中的数据类型错误而面临的另一个关于排序数据顺序错误的问题...

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-10-06
    • 1970-01-01
    • 2021-07-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多