首页 > 解决方案 > DataTables 警告:表 id=users_table - 请求第 0 行第 4 列的未知参数“操作”

问题描述

我创建了一个列搜索数据表,但我不知道如何使用 CRUD 操作添加 Action 列。

这是我的刀片:users.blade.php。我没有发送 html 部分,因为我没有发现任何困难。

<script type="text/javascript">
$(document).ready(function(){

 fetch_data();

 function fetch_data(department = '')
 {
  $('#users_table').DataTable({
   processing: true,
   serverSide: true,
   ajax: {
    url:"{{ route('users.index') }}",
    data: {department:department}
   },
   columns:[
    {
     data: 'id',
     name: 'id'
    },
    {
     data: 'name',
     name: 'name'
    },
    {
     data: 'deptName',
     name: 'deptName',
     orderable: false
    },
    {
     data:'email',
     name:'email'
    },
    {
      data: 'action', 
      name: 'action', 
      orderable: false, 
      searchable: false
      }    
   ]
  });
 }
</script>

这是我的控制器:UsersController。请帮忙,因为解决这个问题真的很重要。

function index(Request $request)
    {
     if(request()->ajax())
     {
      if($request->department)
      {
       $data = DB::table('users')
         ->join('department', 'department.deptName', '=', 'users.department')
         ->select('users.id', 'users.name', 'users.email', 'department.deptName')
         ->where('users.department', $request->department);
      }
      else
      {
       $data = DB::table('users')
         ->join('department', 'department.deptName', '=', 'users.department')
         ->select('users.id', 'users.name', 'users.email', 'department.deptName');
      }

      return datatables()->of($data)->make(true);

      }


         $department = DB::table('department')
         ->select("*")
         ->get();

      return view('users', compact('department'));


      $data = User::latest()->get();
            return Datatables::of($data)
                    ->addIndexColumn()
                    ->addColumn('action', function($row){

                           $btn = '<a href="javascript:void(0)" class="edit btn btn-primary btn-sm">Read</a>';

                            return $btn;
                    })
                    ->rawColumns(['action'])
                    ->make(true);
         }

标签: jqueryajaxlaraveldatatables

解决方案


您正在使用 ajax 数据表,我将用代码更新您,它可以与过滤器一起正常工作,并在 laravel 中为 ajax 数据表搜索完全可定制的服务器端代码

请不要忘记包含数据表库和其他与数据表相关的库

in your routes/web.php

Route::any('/admin/viewallregisteredusers', 'FrontusersController@viewAllRegisteredClients');
    Route::any('/admin/viewallusers_datatable', 'FrontusersController@getAllUsers');

然后在您的控制器中为此添加两个操作

public function viewAllRegisteredClients(){
        return view('frontusers.viewallusers');
    }

public function getAllUsers(Request $request){
            $columns = array(
                0 => 'id',
                1 => 'user_name',
                2 => 'user_email',
                3 => 'user_type',
                4 => 'created_at',
                5 => 'updated_at',
            );
            $limit = $request->input('length');
            $start = $request->input('start');
            $order = $columns[$request->input('order.0.column')];
            $dir = $request->input('order.0.dir');
            $query = new Frontuser();
            $totalTitles = $query->count();
            if (empty($request->input('search.value'))) {
                    $titles = Frontuser::select('id','user_name','user_email','user_type','created_at','updated_at')->offset($start)
                      ->limit($limit)
                      ->orderBy($order, $dir)
                      ->get();
                    $totalFiltered = $totalTitles;
                     $data = array();
            }else{
                    $search = $request->input('search.value');
                    $titless = Frontuser::where(function ($q) use ($search)
                    {
                        $q->where('user_name', 'LIKE', "%{$search}%")
                        ->orWhere('user_email', 'LIKE', "{$search}%")
                        ->orWhere('user_type', 'LIKE', "{$search}%")
                        ->orWhere('created_at', 'LIKE', "{$search}%");
                    });
                    $titles = $titless->offset($start)
                       ->limit($limit)
                       ->orderBy($order, $dir)
                       ->get();
                    $totalFiltered = Frontuser::where(function ($q) use ($search)
                    {
                        $q->where('user_name', 'LIKE', "%{$search}%")
                        ->orWhere('user_email', 'LIKE', "{$search}%")
                        ->orWhere('user_type', 'LIKE', "{$search}%")
                        ->orWhere('created_at', 'LIKE', "{$search}%");
                    })->count();
            }

            if (!empty($titles)) {
                 $data = array();
                 $count = 1;
                 foreach ($titles as $title) {
                    $id= base64_encode(serialize($title->id));
                        $nestedData['sno'] = $count;
                        $nestedData['user_name'] = ucfirst($title->user_name);
                        $nestedData['user_email'] = $title->user_email;
                        $nestedData['user_type'] = $title->user_type;
                        $nestedData['created_at'] = date('d-m-Y', strtotime($title->created_at));
                        $nestedData['updated_at'] = '<div class="dropdown">
                                                      <button class="btn btn-primary dropdown-toggle" type="button" data-toggle="dropdown">Actions
                                                      <span class="caret"></span></button>
                                                      <ul class="dropdown-menu">
                                                        <li><a href='.action("FrontusersController@editUser",$id).'>Edit</a></li>
                                                        <li><a href='.action("FrontusersController@adminChangeUserPassword",$id).'>Change Password</a></li>
                                                      </ul>
                                                    </div>';
                        $data[] = $nestedData;
                        $count++;
                 }
            }
            $json_data = array(
                "draw" => intval($request->input('draw')),
                "recordsTotal" => intval($totalTitles),
                "recordsFiltered" => intval($totalFiltered),
                "data" => $data,
            );
            echo json_encode($json_data);
    }

你的视图文件看起来像这样

<div id="content-container">
        <!--start upper  content-->
        <div id="page-head">

                    <!--Page Title-->
                    <!--~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~-->
                    <div id="page-title">
                        <h1 class="page-header text-overflow">View All User</h1>
                    </div>
                    <!--~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~-->
                    <!--End page title-->


                    <!--Breadcrumb-->
                    <!--~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~-->
                    <ol class="breadcrumb">
                    <li><a href="#"><i class="demo-pli-home"></i></a></li>
                    <li><a href="#">User</a></li>
                    <li class="active">View all Users</li>
                    </ol>
                    <!--~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~-->
                    <!--End breadcrumb-->

                </div>
    <!--===================================================-->
        <!--End upper content--> 
         <!--Page content-->
                <!--===================================================-->
                <div id="page-content">
                     <div style="text-align:center">
                        <?php echo Helpers::displayAlert(); ?>
                    </div>
                    <!-- Basic Data Tables -->
                    <!--===================================================-->
                    <div class="panel">
                        <div class="panel-heading">
                            <h3 class="panel-title">All User List</h3>
                        </div>
                        <div class="panel-body">
                            <table id="datatables" class="table table-striped table-bordered">
                                <thead>
                                    <tr>
                                        <th>Sno</th>
                                        <th>Name</th>
                                        <th>Email</th>
                                        <th>User Type</th>
                                        <th>Date Of Joining</th>
                                        <th data-sortable="false" >Action</th>
                                    </tr>
                                </thead>

                            </table>
                        </div>
                    </div>
                    <!--===================================================-->
                    <!-- End Striped Table -->
                    </div>
                <!--===================================================-->
                <!--End page content-->
</div>
<script type="text/javascript">
     $(document).ready(function () 
     {
        $('#datatables').DataTable({
            "processing": true,
            "serverSide": true,
            "ajax":{
                     "url": "<?php echo URL::asset('admin/viewallusers_datatable');?>",
                     "dataType": "json",
                     "type": "POST",
                     "data":{ _token: "{{csrf_token()}}"}
                   },
                   "dom": 'lBfrtip',
                    "buttons": [
                          {
                              extend: 'collection',
                              text: 'Export',
                              buttons: [
                                  'copy',
                                  'excel',
                                  'csv',
                                  'pdf',
                                  'print'
                              ]
                          }
                      ],
                "columns": [
                    { "data": "sno" },
                    { "data": "user_name" },
                    { "data": "user_email" },
                    { "data": "user_type" },
                    { "data": "created_at" },
                    { "data": "updated_at" },
                ],

        });
        $('.dropdown-toggle').dropdown()
    });
</script>

你可以根据需要修改它


推荐阅读