0

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);
}

1 Answer 1

1

Well, once again: It was a simple solution.

All I needed was to append

->select('users.*');

to

$users = User::with('roles')

This solved the relation searching and it is even documented:

$users = User::with('roles')->select('users.*');
Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.