我正在尝试使用自定义过滤器过滤datatable,假设我想使用“title”列进行过滤:在我的控制器端点中,我这样做了:
public function getDatatableIndex(Request $request)
{
if ($request->ajax()) {
$model= Post::query();
if ($request['title'] ?? false) {
$model->where('title', 'LIKE', "%{$request['title']}%");
}
$data = PostResource::collection($model->get())->resolve();
$dataTable = DataTables::of($data)
->addColumn('#', function ($row) {
static $order = 0;
return ++$order;
});
$dataTable->addColumn('actions', function ($row) {
$data['id'] = $row['id'];
$data['actions'] = $this->table_data['actions'];
return view('dashboard.post.parts.actions', $data)->render();
})
->rawColumns(['#', 'actions'])
->escapeColumns(['*']);
return $dataTable->make(true);
}
}
在JS脚本中,我这样做:
var table = $("#kt_datatable_example_1").DataTable({
processing: true,
searching: false,
serverSide: true,
// ajax: route,
ajax: {
url: route,
data: ajaxFilter
},
columns: columns });
$("#apply-filters").click(function () {
console.log($("#title").val()); // this will log the title in the console correctly
table.draw();
});
var ajaxFilter = function (d) {
d.title = $("#title").val();
};
在这里我注意到一些事情,这是标题不是通过请求发送,但如果我这样做
ajax: {
url: route,
data: {
title: "test title"
}
},
然后是它的工作
所以有没有什么建议或解决方案,因为我尝试了很多方法,都不起作用。
1条答案
按热度按时间23c0lvtd1#
这是我的例子。我把我的搜索功能放在最上面,就像Mr. Marius在评论中说。