Created
May 23, 2017 04:50
-
-
Save sagormax/9de3db3f6278f3a5e2c9d9bfd6d91ba3 to your computer and use it in GitHub Desktop.
Laravel DataTable Server Side Processing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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'); | |
} | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<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> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
DataTable server side custom search option is really helpful. Good job.