2015-12-03 44 views
0

显示我使用的用户列表yajra/laravel-datatablesfilterColumn在yajra/laravel-datatables中不起作用

除了Datatable自己的搜索框来过滤结果,我有一个组合框可以根据用户的级别对用户进行过滤。

这是我的组合框:

<div class="form-group" id="levelFilterWrapper"> 
           <label for="levelFilter">Userlevel :</label> 
           <select id="levelFilter" name="levelFilter" class="form-control"> 
            <option value="all">All</option> 
            <option value="admin">admin</option> 
            <option value="user">user</option> 
            <option value="centerManager">centerAdmin</option> 
           </select> 
          </div> 

,这是我的jQuery代码:

var allUsersTable = 
       $('#allUsersTable').DataTable({ 
        processing: true, 
        serverSide: true, 
        "bSort": false, 
        "responsive": true, 
        ajax: { 
         url : '{!! route('usersData') !!}', 
         data: function(d){ 
          d.level = $('#levelFilter').val() 
         } 
        }, 
        columns: [ 
         {data: 'checkbox', name: 'checkbox', "width": "20px"}, 
         {data: 'userPic', name: 'userPic', 'className': 'text-center'}, 
         {data: 'email', name: 'email'}, 
         {data: 'created_at', name: 'created_at'}, 
         {data: 'level', name: 'level', 'className': 'text-center'}, 
         {data: 'actions', name: 'actions', 'className': 'text-center'} 
        ] 
       }); 

     $('#levelFilter').change(function (e) { 


      allUsersTable.draw(); 
     }); 

,这是我yajra数据表laravel代码:通过levelFilter组合框

$users = User::select(['user_id', 'name', 'family', 'email', 'created_at', 'level']); 

     $datatable = app('datatables')->of($users) 
      ->filter(function ($query) use ($request) { 
       if (!empty($request->get('level')) and $request->get('level') != 'all') { 
        return $query->whereLevel($request->get('level')); 
       } else { 
        return $query; 
       } 
      }) 
      ->orderBy('created_at', 'desc') 
      ->addColumn('checkbox', '<input type="checkbox" name="item_id[]" value="{{$user_id}}" id="Check_{{$user_id}}" class="minimal">') 
      ->addColumn('userPic', function ($user) { 
       return '<img src="http://www.gravatar.com/avatar/' . md5($user->email) . '?d=mm&s=30" class="img-thumbnail img-responsive">'; 
      }) 
      ->editColumn('email', function ($user) { 
       return ' 
         ' . $user->name . ' ' . $user->family . ' 
         <div class="en-text"><a href="mailto:' . $user->email . '" target="_blank">' . $user->email . '</a></div> 
        '; 
      }) 

      ->editColumn('created_at', function ($user) { 
       return JDF::jdate('l j F Y - G:i', $user->created_at); 
      }) 
      ->addColumn('actions', function ($user) { 
       return ' 
         <a href="/admin/user/' . $user->user_id . '/edit" class="btn btn-primary btn-sm btn-flat fa fa-pencil-square-o" data-toggle="tooltip" data-placement="top" title="Edit And View"></a> 
         <a href="#" class="btn btn-danger btn-sm btn-flat fa fa-trash-o delItem" data-toggle="tooltip" data-placement="top" title="Delete" data-item-id="' . $user->user_id . '"></a> 
        '; 
      }); 

     if ($keyword = $request->get('search')['value']) { 
      $datatable->filterColumn('name', 'where', '=', "%$keyword%"); 
     } 

     return $datatable->make(true); 

滤波工作正常但我希望当管理员选择一个用户级别表单,通过DataTabl进行筛选在搜索框中搜索该选定的级别。但类型后搜索框中输入一些字符,再次显示了组合框过滤完全相同的结果,似乎搜索框筛选不会在这种情况下

回答

0

工作,根据在yajra/laravel-的DataTable Github的页面yajra答案:

使用 - > filter()将禁用全局搜索,导致搜索 文本框不起作用。如果你想使用过滤器,那么你需要 为每个字段编写每个查询。

在另一方面,你可以只提取级过滤上查询 水平做出这样的工作:

$users = User::select(['user_id', 'name', 'family', 'email', 'created_at', 'level']); 
if (!empty($request->get('level')) and $request->get('level') != 'all') { 
    $users = $users->whereLevel($request->get('level')); 
} 

    $datatable = app('datatables')->of($users) 
     ->orderBy('created_at', 'desc') 
     ->addColumn('checkbox', '<input type="checkbox" name="item_id[]" value="{{$user_id}}" id="Check_{{$user_id}}" class="minimal">') 
     ->addColumn('userPic', function ($user) { 
      return '<img src="http://www.gravatar.com/avatar/' . md5($user->email) . '?d=mm&s=30" class="img-thumbnail img-responsive">'; 
     }) 
     ->editColumn('email', function ($user) { 
      return ' 
        ' . $user->name . ' ' . $user->family . ' 
        <div class="en-text"><a href="mailto:' . $user->email . '" target="_blank">' . $user->email . '</a></div> 
       '; 
     }) 

     ->editColumn('created_at', function ($user) { 
      return JDF::jdate('l j F Y - G:i', $user->created_at); 
     }) 
     ->addColumn('actions', function ($user) { 
      return ' 
        <a href="/admin/user/' . $user->user_id . '/edit" class="btn btn-primary btn-sm btn-flat fa fa-pencil-square-o" data-toggle="tooltip" data-placement="top" title="Edit And View"></a> 
        <a href="#" class="btn btn-danger btn-sm btn-flat fa fa-trash-o delItem" data-toggle="tooltip" data-placement="top" title="Delete" data-item-id="' . $user->user_id . '"></a> 
       '; 
     }); 

    return $datatable->make(true); 
+0

如果级别加密的,因此如何在laravel使用此过滤器@ABDeveloper ? 我已经使用特征加密Crypt来加密和解密 –

相关问题