así que estoy usando laravel 5.4 y usando tablas de datos ajax con mi elocuente es tener una tabla de unión y así sucesivamente, ahora quiero hacer una búsqueda / filtrar, simplemente no funciona.
aquí está mi código de controlador`
public function index()
{
try{
return view('admins.'.$this->kelaspath.'.index');
}catch (Exception $e){
return Redirect::back()->withInput()->with('errormessage',$e->getMessage());
}
}
public function data_kegiatan()
{
$data = Kegiatan::with('tempat','sasaranhub.sasaran','prasyarat.kegiatan','total_peserta');
$datatable = Datatables::of($data)
->editColumn('kota', function($data){
return $data->tempat ? $data->tempat->kota : $data->kota;
})
->editColumn('tempat', function($data){
return $data->tempat ? $data->tempat->name : '';
})
->editColumn('tanggal', function($data){
return $data->tanggal ? with(new Date($data->tanggal))->format('d F Y') : '';
})
->editColumn('tanggal2', function($data){
return $data->tanggal2 ? with(new Date($data->tanggal2))->format('d F Y') : '';
})
->editColumn('status', function($data){
if($data->status == 1){
$status = '<a class="btn btn-default btn-sm nopointer"><i class="fa fa-pause"></i> <span class="hidden-xs">MENUNGGU</span></a>';
}elseif($data->status == 2){
$status = '<a class="btn btn-warning btn-sm nopointer"><i class="fa fa-circle-o"></i> <span class="hidden-xs">PENDAFTARAN TERBUKA</span></a>';
}elseif($data->status == 3){
$status = '<a class="btn btn-warning btn-sm disabled"><i class="fa fa-ban"></i> <span class="hidden-xs">PENDAFTARAN TERTUTUP</span></a>';
}elseif($data->status == 4){
$status = '<a class="btn btn-primary btn-sm disabled"><i class="fa fa-dot-circle-o"></i> <span class="hidden-xs">BERJALAN</span></a>';
}elseif($data->status == 5){
$status = '<a class="btn btn-primary btn-sm nopointer"><i class="fa fa-times"></i> <span class="hidden-xs">TERLAKSANA</span></a>';
}elseif($data->status == 6){
$status = '<a class="btn btn-danger btn-sm nopointer"><i class="fa fa-times"></i> <span class="hidden-xs">BATAL</span></a>';
}else{
$status = "-";
}
return $status;
})
->editColumn('sasaranhub', function($data){
$sasaran = '';
if(!empty($data->sasaranhub)){
foreach ($data->sasaranhub as $sr) {
$sasaran .= '<a class="btn btn-info btn-xs nopointer marginbottom" >' . $sr->sasaran->name . '</a> ';
}
}
return $sasaran;
})
->editColumn('prasyarat', function($data){
$prasyarat = '';
if(!empty($data->prasyarat)){
foreach ($data->prasyarat as $pr) {
$prasyarat .= '<a class="btn btn-info btn-xs nopointer marginbottom">' . $pr->kegiatan->kode . ' - ' . $pr->kegiatan->name . '</a> ';
}
}
return $prasyarat;
})
->addColumn('durasi',function($data){
$mulai = new \Carbon\Carbon($data->tanggal);
$startTimeStamp = strtotime($mulai->subDays(1));
$endTimeStamp = strtotime($data->tanggal2);
$timeDiff = abs($endTimeStamp - $startTimeStamp);
$numberDays = $timeDiff/86400;
$numberDays = intval($numberDays);
return $numberDays;
})
->rawColumns(['sasaranhub', 'prasyarat','status'])->make(true);
return $datatable;
}
y aquí está mi jquery de tabla de datos
var table = $('#dataTables-example').DataTable({
dom: '<"top"B>t<"bottom"p>',
processing: true,
serverSide: true,
ajax: '{!! route('admins.kegiatan.data_kegiatan') !!}',
responsive:{
details:{
type: 'column',
target: -1
}
},
columns: [
{ data: 'id', name: 'kegiatan.id', visible : false, searchable : false },
{ data: 'status', name: 'kegiatan.status',visible : false, searchable : false },
{ data: 'name', name: 'kegiatan.name', className: 'warptext'},
{ data: 'kota', name: 'kegiatan.kota'},
{ data: 'tempat', name: 'kegiatan.tempat',className: 'warptext'},
{ data: 'tanggal', name: 'kegiatan.tanggal'},
{ data: 'tanggal2', name: 'kegiatan.tanggal2' },
{ data: 'durasi', name: 'durasi', render: function(data){
return data ? data + ' hari' : '-';
}},
{ data: 'status', name: 'kegiatan.status'},
{ data: 'sasaranhub', name: 'kegiatan.sasaranhub' },
{ data: 'prasyarat', name: 'kegiatan.prasyarat', render:function(data){
return data ? data : '-';
} },
{ data: 'min', name: 'kegiatan.min' },
{ data: 'max', name: 'kegiatan.maks' },
{ data: 'max', name: 'kegiatan.terdaftar'},
{ data: null, orderable: 'false', searchable: 'false', className:'control', defaultContent: ''}
],
buttons: [
{
extend:'colvis',
columns: ':gt(1)',
text: '<i class="fa fa-table"></i>'
},
{
extend:'colvisGroup',
text: 'Semua',
hide: [0,1],
show: ':hidden'
}
],
language: {
buttons : {},
select:{
rows:{
_: "",
0: "",
1: ""
}
},
"sProcessing": "Sedang proses...",
"sLengthMenu": "Tampilan _MENU_ entri",
"sZeroRecords": "Tidak ditemukan data yang sesuai",
"sInfo": "Tampilan _START_ sampai _END_ dari _TOTAL_ entri",
"sInfoEmpty": "Tampilan 0 hingga 0 dari 0 entri",
"sInfoFiltered": "(disaring dari _MAX_ entri keseluruhan)",
"sInfoPostFix": "",
}
});
$('#searchtext').keyup(function(){
table.search($(this).val()).draw() ;
});
y tambien aqui esta mi tabla html
<div class="input-group tabletools">
<div class="input-group-addon"><i class="fa fa-search"></i></div>
<input type="text" id="searchtext" class="form-control" placeholder="Kata kunci pencarian...">
</div>
<table class="table table-hover" id="dataTables-example" cellspacing="0" width="100%">
<thead class="bg-light-blue-active color-palette">
<tr>
<th hidden>id</th>
<th hidden>status</th>
<th data-priority="1">Nama </th>
<th>Kota</th>
<th>Tempat</th>
<th class="sort" data-priority="4">Mulai</th>
<th data-priority="3">Selesai</th>
<th>Durasi</th>
<th data-priority="2">Status</th>
<th class="none">Sasaran</th>
<th class="none">Prasyarat</th>
<th class="none">Min</th>
<th class="none">Maks</th>
<th class="none">Terdaftar</th>
<th></th>
</tr>
</thead>
</table>
El problema es que está agregando columnas a la tabla que no existen en la base de datos y no las tiene marcadas como searchable: false
. Está intentando buscar aquellas columnas que no existen. Si habilita la depuración, debería haber dicho algo muy similar SQL ERROR: column 'example.durasi' not found
(puede encontrar esta respuesta en las herramientas web de su navegador, ya que se llama a través de ajax)
oh .. entonces, ¿cómo agregar búsquedas: falso? ¿Dónde necesito agregar una marca? bueno, nunca uso tablas de datos con ajax y la mayoría de las veces solo uso tablas de datos DOM y busca bastante bien con la misma consulta / elocuente como allí ...
Lo definirías en el javascript, donde se definen las columnas.
Si observa la última columna definida allí, ya tiene esta propiedad.
{ data: null, orderable: 'false', searchable: 'false', className:'control', defaultContent: ''}
Agregaría la propiedad searchable:false
(probablemente también desee deshabilitar el pedido) a cualquier columna que no esté en la base de datos. Aún sería posible buscar esas columnas con la función filter()
, pero tendría que manejar esa lógica manualmente.