首页 > 解决方案 > Laravel DataTables 下拉过滤器不起作用

问题描述

我正在尝试在 Yajra Laravel DataTables 中创建 DataTables 下拉过滤器,但出现错误:

在此处输入图像描述

这是我的控制器:

    public function index(Request $request)
    {
        $title="Data Pelamar Kerja";
        if (request()->ajax()){
            $query = Applicant::with('formation')->get();
       //      $query = Applicant::all('formation')->where('status','active')->get();
            return DataTables::of($query)
            ->addColumn('action', function($item){
            return 
              '
              <div class="btn-group">
              <a href="#!" data-toggle="tooltip"  data-id="'.$item->id.'" class="btn btn-sm btn-danger delete-data">Hapus</a>
              </div>
              ';
            })
            ->editColumn('status', function ($item){
                if ($item->status == 'quo'){
                     return '<span class="badge-text badge-text-small info"><ion-icon name="checkmark-circle"></ion-icon> '.$item->status.'</span>';
                }else{
                     return '<span class="badge-text badge-text-small success"><ion-icon name="close-circle"></ion-icon>'.$item->status.'</span>';
                }
            })
             ->editColumn('formations_id', function ($item){
                if ($item->formations_id == 0 || $item->formations_id == NULL){
                     return '<span class="text-danger">-</span>';
                }else{
                     return $item->formation->name;
                }
            })
             ->filter(function ($instance) use ($request) {
                        if ($request->get('status') == 'quo' || $request->get('status') == 'melamar') {
                            $instance->where('status', $request->get('status'));
                        }
                        if (!empty($request->get('search'))) {
                             $instance->where(function($w) use($request){
                                $search = $request->get('search');
                                $w->orWhere('name', 'LIKE', "%$search%")
                                ->orWhere('email', 'LIKE', "%$search%");
                            });
                        }
              })
       
            ->addIndexColumn()
            ->removeColumn('id')
            ->rawColumns(['action','status','formations_id'])
            ->make(true);
       }
        return view('pages.admin.applicant.index',['title'=>$title]);
    }

这是我的 js 函数:

 var datatable = $('#appTable').DataTable({
            processing:true,
            serverSide:true,
            ordering:true,
            ajax:{
                     url:'{!! url()->current() !!}',
                     data: function (d) {
                     d.status = $('#status').val(),
                     d.search = $('input[type="search"]').val()
              }
            },
            columns:[
                {data: 'DT_RowIndex', name:'DT_RowIndex'},
                {data:'name', name:'name'},
                {data:'gender', name:'gender'},
                {data:'email', name:'email'},
                {data:'status', name:'status'},
                {data:'formations_id', name:'formations_id'},
                {
                    data:'action',
                    name:'action',
                    orderable:false,
                    searcable:false,
                    width:'15%'
                },
            ],
            order:[
                [0,'asc']
            ]
       });
       $('#status').change(function(){
       datatable.draw();
       });

这是我的下拉表单:

 <div class="form-group">
                                   <label><strong>Status :</strong></label>
                                   <select id='status' class="form-control" style="width: 200px">
                                   <option value="">Filter Status</option>
                                   <option value="quo">Quo</option>
                                   <option value="melamar">Melamar</option>
                                   </select>
                            </div>

我对我的代码有什么问题感到困惑。我尝试了互联网上的各种教程,但它不起作用。

标签: phpjquerylaraveldatatableyajra-datatable

解决方案


数据表需要在后续的方法链中使用builder实例。尝试以下删除get()

$query = Applicant::all('formation')->where('status','active')->latest();

推荐阅读