【问题标题】:Yajra data table using search and custom filter togetherYajra 数据表同时使用搜索和自定义过滤器
【发布时间】:2019-03-04 07:35:57
【问题描述】:
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 或其他东西进行一些自定义,即将允许搜索和过滤器。

documentation 也没有搜索。

有一个option 可以像下面的代码一样启用搜索,但它确实 not 似乎在工作,因为我已经删除了上面代码中的 dom 属性。

search: {
        "regex": true
    }

【问题讨论】:

    标签: php laravel yajra-datatable


    【解决方案1】:

    我不知道搜索是如何自动工作的,但我已经针对我的要求进行了编码,并且工作正常,并给出了一些想法,你可以如何做到这一点。

    您可以使用$request-&gt;get('search')['value'] 获取搜索词,现在编写代码来检查您的条件是否得到满足并在您的控制器或模型中过滤结果。以下是在 Controller 中执行此操作的代码。

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

    【讨论】:

    • 嗨,我有相同的代码(作为示例),但我的 $request->get('category') 始终为空。
    • @Swim89 可以给我看看你的 JS 吗,这样我可以更好地了解它吗?
    • @Swim89 你能告诉我#states 和#federations html吗?
    • @Swim89 我猜是选择框,所以你可以使用 `d.state = $('#states :selected').val(); d.federation = $('#federations :selected').val();` 而不是 ` d.state = $('#states').val(); d.federation = $('#federations').val();`
    猜你喜欢
    • 2020-06-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-20
    • 1970-01-01
    • 2021-03-20
    相关资源
    最近更新 更多