Tengo una base de datos con una tabla con 5M de registros y casi 20 columnas...
Este es mi controller:
public function getLeads(Request $request)
{
$params = $request->params;
$whereClause = $params['sac'];
$query = DB::table('leads')->orderBy('NIF', 'asc');
return DataTables::queryBuilder($query)->toJson();
}
Actualmente tengo este código en javascript que funciona sin problemas en pocos resultados:
if (dt_filter_table.length) {
// Setup - add a text input to each footer cell
$('.dt-column-search thead tr').clone(true).appendTo('.dt-column-search thead');
$('.dt-column-search thead tr:eq(1) th').each(function (i) {
var title = $(this).text();
$(this).html('<input type="text" class="form-control form-control-sm" placeholder="Search ' + title + '" />');
$('input', this).on('keyup change', function () {
if (dt_filter.column(i).search() !== this.value) {
dt_filter.column(i).search(this.value).draw();
}
});
});
var dt_filter = dt_filter_table.DataTable({
serverSide: true,
paging: true,
ajax: {
url: '/test/lead-list',
data: function (data) {
data.params = {
sac: "helo"
}
}
},
columns: [
{ data: 'nif', name:'nif' },
{ data: 'name', name:'name' },
{ data: 'activity', name:'activity' },
{ data: 'province', name:'province' },
{ data: 'locality', name:'locality' },
{ data: 'telephone',
render: function ( data, type, row ) {
return data ? '<a href="tel:'+data+'">'+data+'</a>' : 'N/A';
}, name:'telephone'
},
{ data: 'telephone2', name:'telephone2' }
],
dom: '<"d-flex justify-content-between align-items-center mx-0 row"<"col-sm-12 col-md-6"l><"col-sm-12 col-md-6"f>>t<"d-flex justify-content-between mx-0 row"<"col-sm-12 col-md-6"i><"col-sm-12 col-md-6"p>>',
orderCellsTop: true,
language: {
paginate: {
// remove previous & next text from pagination
previous: ' ',
next: ' '
}
}
});
}
puse el serverSide: true,
pero al momento de correr la db con los 5M de registros... carga la tabla y en el contenido dice cargando unicamente.... elimino registros y dejo solo unos... 20k y funciona sin problema...
No tira error, todo funciona correcto, pero tarda mucho tiempo en cargar.