使用搜索和自定义过滤器一起使用YAJRA数据表


Laravel: 5.6.39
PHP: 7.2.10
Yajra Table: 8.0

示例代码

$(document).ready( function() {
        var url = "{{ url('/admin/posts') }}";
        $(function() {
            var oTable = $('#admin-posts').DataTable({
                dom: "<'row'<'col-xs-12'<'col-xs-6'l><'col-xs-6'p>>r>"+
            "<'row'<'col-xs-12't>>"+
            "<'row'<'col-xs-12'<'col-xs-6'i><'col-xs-6'p>>>",
                processing: true,
                serverSide: true,
                ajax: {
                    url: url,
                    data: function (d) {
                        d.category = $("#category option:selected").val();
                        d.language = $("#language option:selected").val();
                    }
                },            
                columns: [
                    { data: 'post_checkbox', name: 'post_checkbox' },
                    { data: 'created_at', name: 'created_at' },
                    { data: 'post_label', name: 'post_label' },
                    { data: 'post_link', name: 'post_link' },
                    { data: 'view', name: 'view' },
                    { data: 'post_category', name: 'post_category' },
                ],
                stateSave: true,
                bDestroy: true,
          });
          $('#search-form').on('submit', function(e) {
               oTable.draw();
               e.preventDefault();
            });
        });
   });

现在,如果我要删除dom搜索和过滤两个都可以看到,但是搜索仍然无法正常工作,如果我要删除过滤器,则只能搜索,我相信应该对DOM或某些东西进行一些自定义,可以允许搜索和过滤器。

在文档中也没有搜索。

有一个选项可以像以下代码一样启用搜索,但是它确实似乎在起作用,这也是我在上述代码中删除了dom属性。

search: {
        "regex": true
    }

我不知道搜索是如何自动工作的,但是我已经为自己的要求编码,这很好,并给出了一些想法,如何做到。

您可以使用$request->get('search')['value']获取搜索术语,然后编写代码以检查您的条件是否满足并过滤您的控制器或模型中的结果。以下是在控制器中执行的代码。

return DataTables::eloquent($posts)
        ->filter(function ($query) use ($request) {
            if ($request->has('category') && ! is_null($request->get('category'))) {
                $query->where('post_category', $request->get('category'));
            }
            if ($request->has('language') && ! is_null($request->get('language')) ) {
                $query->where('post_language', $request->get('language'));
            }
            
            if ($request->has('search') && ! is_null($request->get('search')['value']) ) {
                $regex = $request->get('search')['value'];
                return $query->where('your_field', 'like', '%' . $regex . '%');
                });
            }
        })->toJson();

最新更新