CodeIgniter4 DataTables Usage - Custom Filter
Table Customers
Custom Filter
Cust. No | Name | Phone | City | Country | Postal Code |
---|
Note
This sample database is downloaded from : https://www.mysqltutorial.org/mysql-sample-database.aspx/
Controller
Call method
There are 2 argument on anonymouse function.
filter()
with anonymous function argument.There are 2 argument on anonymouse function.
$builder
and $request
use \Hermawan\DataTables\DataTable;
public function custom_filter()
{
$db = db_connect();
$builder = $db->table('customers')->select('customerNumber, customerName, phone, city, country, postalCode');
return DataTable::of($builder)
->filter(function ($builder, $request) {
if ($request->country)
$builder->where('country', $request->country);
})
->toJson();
}
Javascript
add the ajax
data
and dont forget create event like onChange
event on input filter.
$(document).ready(function() {
table = $('#table').DataTable({
processing: true,
serverSide: true,
ajax: {
url: '/ajax-datatable/custom-filter',
data: function (d) {
d.country = $('#country').val();
}
},
});
$('#country').change(function(event) {
table.ajax.reload();
});
});
AJAX Response :
{
"draw": "1",
"recordsTotal": 122,
"recordsFiltered": 122,
"data": [
[
"103",
"Atelier graphique",
"40.32.2555",
"Nantes",
"France",
"44000"
],
[
"112",
"Signal Gift Stores",
"7025551838",
"Las Vegas",
"USA",
"83030"
],
[
"114",
"Australian Collectors, Co.",
"03 9520 4555",
"Melbourne",
"Australia",
"3004"
],
[
"119",
"La Rochelle Gifts",
"40.67.8555",
"Nantes",
"France",
"44000"
],
[
"121",
"Baane Mini Imports",
"07-98 9555",
"Stavern",
"Norway",
"4110"
],
[
"124",
"Mini Gifts Distributors Ltd.",
"4155551450",
"San Rafael",
"USA",
"97562"
],
[
"125",
"Havel & Zbyszek Co",
"(26) 642-7555",
"Warszawa",
"Poland",
"01-012"
],
[
"128",
"Blauer See Auto, Co.",
"+49 69 66 90 2555",
"Frankfurt",
"Germany",
"60528"
],
[
"129",
"Mini Wheels Co.",
"6505555787",
"San Francisco",
"USA",
"94217"
],
[
"131",
"Land of Toys Inc.",
"2125557818",
"NYC",
"USA",
"10022"
]
]
}