I have a custom filter that I want to use in order to search the role of the user. The role is returned correctly and is searchable using my existing code. However, if the search query even partiallly matches something else in any row, the ajax will even show other, irrelevant rows.
What I need is to make the query, specific to one column.
This is the query I use in order to trigger the search from a dropdown menu:
$("#users-list-role").on("change", function () {
var usersRoleSelect = $("#users-list-role").val();
usersTable.columns(1).search(usersRoleSelect).draw();
});
This is the DataTable:
var usersTable = $('#users_list_table').DataTable({
columnDefs: [
{
targets: [0,1,2],
className: 'center'
}
],
responsive: true,
processing: true,
serverSide: true,
ajax: {
url: formedURL,
},
columns: [
{data: 'full_name', name: 'full_name'},
{data: 'roles', name: 'roles.name'},
{data: 'email', name: 'email'},
{data: 'first_name', name: 'first_name', searchable: true, visible: false },
{data: 'middle_name', name: 'middle_name', searchable: true, visible: false },
{data: 'last_name', name: 'last_name', searchable: true, visible: false },
],
language: {
"url": langURL
},
initComplete:function( settings, json){
$("#employeeTableCard").addClass("scale-in");
}
And this is the Ajax call in the controller:
public function listUsersData(Request $request)
{
if(!$request->ajax())
return Redirect::route('/');
$users = User::with('roles');
return DataTables::of($users)
->addColumn('full_name', '{!!$first_name!!} {!!$middle_name!!} {!!$last_name!!}')
->addColumn('roles', function($users){ return $users->getRoleNames()->first(); })
->make(true);
}