关于 Laravel-DataTable 插件的服务器模式,导致的排序和搜索不能同时起作用
目前状况:
- 1.DataTable下的serverSide:true,为服务器模式
- 2.数据库查询不使用->get(),交予DataTables
- 3.我现在的情况是要对有些数据库取出来的数据【不是数据库本身的数据,而是处理过的,比如,数据库里是”nihao“,处理完是“你好”】进行搜索,但是这个处理完的数据他找不到,只能找数据库里有的数据,排序正常
- 4.如果我查询加上->get(),那搜索处理后的数据是可以搜索的【比如可以搜索到处理后的“你好”,而不是数据库里的nihao】,但是排序又错乱了,我在查询的时候加上orderBy也没有效果
- 麻烦各位大佬看看是否有一些建议和思路,或者我是否缺少了一些东西,我查询了手册,网络都没用找到确切的解决方法
- 下面是一部分代码:
控制器:
return \DataTables::of($openedTasksList)
->editColumn('cname', function ($openedTasksList) {
return $openedTasksList->cname;
})
->editColumn('id', function ($openedTasksList) {//update if
$taskId = '<a href="'.url('tasks-dashboard/edit/'.base64_encode($openedTasksList->id).'/'.base64_encode('opened_tasks')).'?userid='.base64_encode($openedTasksList->shared_to).'" title="'.trans('task.show_task_detail').'" style="text-decoration: underline;color:#0000ff;">'.config('constant.taskIdPrefix').$openedTasksList->id.'</a>';
}
return $taskId;
})
->editColumn('created_at', function ($openedTasksList) {
return !empty($openedTasksList->created_at) ?Helpers::languageTime(date('m/d/y h:i A', strtotime("+1 hours",strtotime(Helpers::getDateTimeByTimezone($openedTasksList->created_at))))) : '';
})
->editColumn('arrival_port_location', function ($openedTasksList) {
return !empty($openedTasksList->arrival_port_location) ? substr($openedTasksList->arrival_port_location, 0,20) : '';
})
->editColumn('deliver_to', function ($openedTasksList) {
return !empty($openedTasksList->deliver_to) ? substr($openedTasksList->deliver_to,0,20) : '';
})
->addColumn('status_name', function ($openedTasksList) {
$taskStatus = Helpers::languageStatus($openedTasksList->status_name);
return $taskStatus;
})
->editColumn('last_free_day', function ($openedTasksList) {
return !empty($openedTasksList->last_free_day) ? Helpers::getDateTimeByTimezone($openedTasksList->last_free_day,'date') : '';
})
->editColumn('delivery_date_time', function ($openedTasksList) {
$deliveryDateTime = !empty($openedTasksList->delivery_date_time)?Helpers::languageTime(Helpers::getDateTimeByTimezone($openedTasksList->delivery_date_time)):trans('task.none');
return $deliveryDateTime;
})
->rawColumns(['id', 'status_name', 'delivery_date_time','update_task', 'share_task','task_files','container'])
->make(true);
下面是一部分Model:
$openedTasksList = DB::table(config('constant.databaseTableNames.tblTasks'))
->selectRaw('tasks.id
,tasks.container
,tasks.created_at
,last_free_day
,delivery_date_time
,arrival_port_location
,deliver_to
,t2.task_id
,status_name
,status.id as st_id
,tasks.created_by
,t2.user_id as shared_to
,t3.countsfile
,t4.find_name as vessel_name
,t5.is_shared
,users.first_name
,users.last_name
,concat(first_name," ",last_name) as cname'
)->where('status_id', '!=', '9')
->joinSub($myActiveTasks_q, 't2', function($join){
$join->on('tasks.id','=','t2.task_id');
})->leftJoinSub($myActiveTasks_c, 't3', function($join){
$join->on('tasks.id','=','t3.task_id')->on('t2.user_id','=','t3.file_userid');
})->leftjoinSub($is_shared_to, 't5', function($join){
$join->on('tasks.id','=','t5.task_id')->on('t2.user_id','=','t5.is_shared_by_id');
})->joinSub($myActiveTasks_b, 't4', function($join){
$join->on('tasks.ship_line','=','t4.id');
})->join('status', 'tasks.status_id', '=', 'status.id')
->join('users', 't2.user_id', '=', 'users.id');
return $openedTasksList;
下面是一部分前端:
lengthMenu=[50,100,200];
columns=[
{data: 'cname', name: 'users.first_name',width:'5%'},
// {data: 'cname', name: 'cname',width:'5%'},
{data: 'id', name: 'id',width:'5%'},
{data: 'container', name: 'container',width:'10%'},
{data: 'created_at', name: 'created_at',width:'10%'},
{data: 'status_name', name: 'status.status_name',width:'10%'},
{data: 'last_free_day', name: 'last_free_day',width:'10%'},
{data: 'delivery_date_time', name: 'delivery_date_time',width:'10%'},
{data: 'arrival_port_location', name: 'arrival_port_location',width:'12.5%'},
{data: 'deliver_to', name: 'deliver_to',width:'12.5%'},
{data: 'update_task', name: 'update_task', orderable: false, searchable: false,width:'5%'},
{data: 'share_task', name: 'share_task', orderable: false, searchable: false,width:'5%'},
{data: 'task_files', name: 'task_files', orderable: false, searchable: false,width:'5%'},
{data: 'last_name', name: 'users.last_name'},
];
var id="#company_active_tasks_list_table";
var table=$(id).DataTable();
var visibleIndex=12;
if(table){
table.destroy();
change_table(id,visibleIndex);
}
function change_table(id,visibleIndex){
var table=$(id).DataTable({
order:[[0,'desc'],[4,'asc']],
lengthMenu:lengthMenu,
processing: true,
"language": {
"processing": "{{trans('task.processing')}}",
"paginate": {
"first": "{{trans('task.first')}}",
"previous": "{{trans('task.previous')}}",
"next": "{{trans('task.next')}}",
"last": "{{trans('task.last')}}"
},
"search":"{{trans('company_board.company_task_other_search')}}",
"infoFiltered":"{{trans('task.infoFiltered')}}",
"zeroRecords":"{{trans('task.zeroRecords')}}",
"info": "{{trans('task.info')}}",
"infoEmpty": "{{trans('task.info_empty')}}",
"emptyTable":"{{trans('task.empty_table')}}",
"lengthMenu": "{{trans('task.length_menu')}}",
},
serverSide: true,
// responsive: true,
autoWidth:false,
ajax : {
url:"{{url('CompanyBoard/getTypeTaskData')}}",
type:"post",
data:{"_token":"{{ csrf_token() }}",task_type:choose_tasks_type_val,user_id:user_id},
},
columns:columns,
// initComplete: function () {
// this.api().columns().every(function () {
// var column = this;
// var input = document.createElement('input');
// $(input).appendTo($(column.footer()).empty())
// .on('change', function () {
// var val = $.fn.dataTable.util.escapeRegex($(this).val());
// column.search(val ? val : '', true, false).draw();
// });
// });
// }
})
.on( 'processing.dt', function (e, settings, data) {
table.columns([visibleIndex]).visible(false);
});
}
推荐文章: