所以我正在使用 laravel 5.4 并使用数据表 ajax 和我的雄辩是有连接表等等,现在我想做搜索/过滤它只是不工作得到内部服务器错误 500 知道为什么吗?
这是我的控制器代码`
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;
}
这是我的数据表 jquery
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() ;
});
还有我的表格 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>
问题是您正在向表中添加数据库中不存在的列,并且您没有将它们标记为searchable: false
。 它正在尝试搜索那些不存在的列。 如果您启用调试,它应该会说一些非常相似的内容SQL ERROR: column 'example.durasi' not found
(您可以在浏览器的 Web 工具中找到此响应,因为它是通过 ajax 调用的)
哦..那么如何添加 searchable: false ? 我需要在哪里添加标记? 好吧,我从不将数据表与 ajax 一起使用,而且大多数时候我只使用 DOM 数据表,并且它使用与上面相同的查询/雄辩的方式搜索得非常好......
您将在定义列的 javascript 中定义它。
如果您查看在那里定义的最后一列,它已经具有此属性。
{ data: null, orderable: 'false', searchable: 'false', className:'control', defaultContent: ''}
您可以将searchable:false
(您可能还想禁用排序)属性添加到不在数据库中的任何列。 仍然可以使用filter()
函数搜索这些列,但您必须手动处理该逻辑。