Skip to content

Instantly share code, notes, and snippets.

@sagormax
Created May 23, 2017 04:50
Show Gist options
  • Save sagormax/9de3db3f6278f3a5e2c9d9bfd6d91ba3 to your computer and use it in GitHub Desktop.
Save sagormax/9de3db3f6278f3a5e2c9d9bfd6d91ba3 to your computer and use it in GitHub Desktop.
Laravel DataTable Server Side Processing
class DataProcessController
{
public function dataTableList(Request $request)
{
$requestData = $request->all();
$fdate = $requestData['columns'][0]['search']['value'];
$tdate = $requestData['columns'][1]['search']['value'];
$today = date('Y-m-d H:i:s');
$columns = array(
0 => 'id'
);
$query = BikeRedeemedtion::select('*');
$query2 = BikeRedeemedtion::select('*');
$parameter = array();
if ( !empty($fdate) && !empty($tdate) ) {
$parameter["fdate"] = $fdate;
$parameter["tdate"] = $tdate;
$query->whereBetween('created_at',[$fdate, $tdate]);
$query2->whereBetween('created_at',[$fdate, $tdate]);
}
if ( !empty($fdate) ) {
$parameter["fdate"] = $fdate;
$query->where('created_at', '>=', $fdate);
$query2->where('created_at', '>=', $fdate);
}
if (!empty($requestData['columns'][2]['search']['value'])) {
$parameter["customer_msisdn"] = $requestData['columns'][2]['search']['value'];
$query->where('customer_msisdn','=',$requestData['columns'][2]['search']['value']);
$query2->where('customer_msisdn','=',$requestData['columns'][2]['search']['value']);
}
if (!empty($requestData['columns'][3]['search']['value'])) { //name
$parameter["model"] = $requestData['columns'][3]['search']['value'];
$query->where('model','=',$requestData['columns'][3]['search']['value']);
$query2->where('model','=',$requestData['columns'][3]['search']['value']);
}
// print_r($query->get());
$query = $query->whereNotNull('chassisNO')->get();
$query2 = $query2->whereNotNull('chassisNO');
$requestData['order'][0]['dir'] = 'DESC';
$totalData = $query->count();
$totalFiltered = $totalData;
$query2->offset($requestData['start']);
$query2->limit($requestData['length']);
$query = $query2->get()->toarray();
$data = array();
$j = 0;
foreach($query as $row)
{
$nestedData = array();
$nestedData[] = ucwords($row["ctDate"]);
$nestedData[] = ucwords($row["customer_msisdn"]);
$nestedData[] = ucwords($row["bike_model"]);
$nestedData[] = ucwords($row["chassisNO"]);
$data[] = $nestedData;
}
$url = url('bike/redeemedtion/downloadExcel');
$query = '<tbody class="employee-grid-error"><tr><th colspan="3"><a href="'.$url.'?' . http_build_query($parameter) . '">Download CSV </a></th></tr></tbody>';
$json_data = array(
"draw" => intval($requestData['draw']), // for every request/draw by clientside , they send a number as a parameter, when they recieve a response/data they first check the draw number, so we are sending same number in draw.
"recordsTotal" => intval($totalData), // total number of records
"recordsFiltered" => intval($totalFiltered), // total number of records after searching, if there is no searching then totalFiltered = totalData
"data" => $data,
"query"=>$query
);
echo json_encode($json_data);
}
public function downloadExcel( Request $request )
{
$query = BikeRedeemedtion::select('*');
if ( ($request->has('fdate') && $request->has('tdate')) ) {
$fdate = $request->fdate;
$tdate = $request->tdate;
$query->whereBetween('created_at',[$fdate, $tdate]);
}
if ( $request->has('fdate') ) {
$fdate = $request->fdate;
$query->where('created_at', '>=', $fdate);
}
if ( $request->has('customer_msisdn') ) {
$query->where('customer_msisdn', '=', $request->customer_msisdn);
}
if ( $request->has('chassisNO') ) {
$query->where('chassisNO', '=', $request->chassisNO);
}
if ( $request->has('model') ) {
$query->where('model', '=', $request->model);
}
$data = $query->whereNotNull('chassisNO')->get()->toArray();
return Excel::create('Bike_Redeemedtion_info', function($excel) use ($data) {
$excel->sheet('Bike_Redeemedtion_Report', function($sheet) use ($data)
{
$sheet->fromArray($data);
});
})->download('csv');
}
}
<div class="form-group col-lg-3">
<label for="fdate" class="control-label col-lg-12">From: </label>
<div class="col-lg-12 row">
{{ Form::text('fdate', '', array('class' => 'form-control','placeholder'=>'2017-01-01','id'=>'fdate')) }}
</div>
</div>
<div class="form-group col-lg-3">
<label for="fdate" class="control-label col-lg-12">To: </label>
<div class="col-lg-12 row">
{{ Form::text('tdate', '', array('class' => 'form-control','placeholder'=>'2017-01-05','id'=>'tdate')) }}
</div>
</div>
<div class="form-group col-lg-3">
<label for="customer_msisdn" class="control-label col-lg-12">Customer MSISDN: </label>
<div class="col-lg-12 row">
{{ Form::text('customer_msisdn', '', array('class' => 'form-control','placeholder'=>'Ex. +88 017xxxxxxxx','id'=>'customer_msisdn')) }}
</div>
</div>
<div class="form-group col-lg-3">
<label for="fdate" class="control-label col-lg-12">Chassis No: </label>
<div class="col-lg-12 row">
<input type="hidden" name="_token" id="csrf-token" value="{{ Session::token() }}" />
{{ Form::text('chassisNO', '', array('class' => 'form-control','placeholder'=>'Chassis Number','id'=>'chassisNO')) }}
</div>
</div>
<div class="form-group col-lg-3">
<label for="fdate" class="control-label col-lg-12">Model: </label>
<div class="col-lg-12 row">
{!! Form::select('model', array(''=>'Select Model'), null, ['class' => 'form-control', 'id' => 'model']) !!}
</div>
</div>
<table id="employee-grid2" cellpadding="0" cellspacing="0" border="0" class="display table" width="100%"></table>
<table class="table table-striped table-bordered table-hover dt-responsive" width="100%" id="employee-grid">
<thead>
<tr role="row" class="heading">
<th>Date</th>
<th>Customer MSISDN</th>
<th>Bike Model</th>
<th>Chassis Number</th>
</tr>
</thead>
</table>
<script type="text/javascript" language="javascript" >
$(document).ready(function() {
var csrftoken=$("#csrf-token").val();
var dataTable = $('#employee-grid').DataTable( {
"processing": true,
"serverSide": true,
"aoColumnDefs" : [
{
'bSortable' : false
}],
"ajax":{
url :'{{ \URL::route('dataTableListBikeRedeemedtion') }}', // json datasource
type: "post", // method , by default get
data:{'_token':csrftoken},
error: function(){ // error handling
$(".employee-grid-error").html("");
$("#employee-grid").append('<tbody class="employee-grid-error"><tr><th colspan="3">No data found in the server</th></tr></tbody>');
$("#employee-grid_processing").css("display","none");
},
"dataSrc": function ( json ) {
$("#employee-grid2").html("");
$("#employee-grid2").append(json.query);
return json.data;
}
}
} );
$("#employee-grid_filter").css("display","none"); // hiding global search box
$('#fdate').on( 'change', function () { // for select box
var i =$(this).attr('data-column');
var v =$(this).val();
dataTable.columns(0).search(v).draw();
} );
$('#tdate').on( 'change', function () { // for select box
var i =$(this).attr('data-column');
var v =$(this).val();
dataTable.columns(1).search(v).draw();
} );
$('#customer_msisdn').on( 'change', function () { // for select box
var i =$(this).attr('data-column');
var v =$(this).val();
dataTable.columns(2).search(v).draw();
} );
$('#chassisNO').on( 'change', function () { // for select box
var i =$(this).attr('data-column');
var v =$(this).val();
dataTable.columns(3).search(v).draw();
} );
$('#model').on( 'change', function () { // for select box
var i =$(this).attr('data-column');
var v =$(this).val();
dataTable.columns(4).search(v).draw();
} );
} );
</script>
@Jobayer704
Copy link

DataTable server side custom search option is really helpful. Good job.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment