【问题标题】:Starting with Datatables Filters从数据表过滤器开始
【发布时间】:2016-07-27 20:48:49
【问题描述】:

我在数据表的顶部添加了许多复选框过滤器。例如,城市组取决于 db 中的城市表,街道取决于街道等等......该表是通过 ajax 填充的。

例如城市组代码:

<div class="form-group">
    <div class="button-group">
        <button type="button" class="btn btn-default btn-sm btn-block dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
            Streets <span class="caret pull-right"></span>
        </button>
        <ul class="dropdown-menu">
            @foreach($streets as $street)
                <li>
                    <input type="checkbox" class="minimal" id="area-{{ $street->slug }}">
                    <label for="area-{{ $street->slug }}">{{ $street->name }}</label>
                </li>
            @endforeach
        </ul>
    </div>
</div>

结果:

那么有没有办法将这些额外的过滤器发送到服务器,然后根据它们返回相关数据?

我想提一下,并非所有过滤器都是表格中的列。 (因为表格太大了)。

我正在使用带有 Laravel 和 Laravel-Datatable 包的数据表。

【问题讨论】:

    标签: jquery laravel datatable datatables eloquent


    【解决方案1】:

    是的,你可以。这有点棘手,但我将向您展示该怎么做:
    首先,确保您的数据表 js 初始化脚本具有 "serverSide": true 选项。 然后编写一个脚本来捕捉你的过滤器变化,我给你一个选择框的例子:

    $('#some-field').change(function () {
        var search = $(this).val();
        table.columns(2).search(search).draw();
    });
    

    它将在第 2 列中搜索文本 - search
    选择框实际上是最简单的选择,但正如我所见,您的表格有带有复选框的过滤器,因此您必须自己确定要发送到后端的内容才能获得正确的结果。
    如果您正在使用集合,您将遇到一些困难,因为集合引擎搜索非常愚蠢return strpos($value, $keyword) !== false;,它不支持正则表达式。 https://github.com/yajra/laravel-datatables/blob/6.0/src/Engines/CollectionEngine.php#L173 同时查询生成器要好得多https://github.com/yajra/laravel-datatables/blob/6.0/src/Engines/QueryBuilderEngine.php#L395

    【讨论】:

    • 我用eloquent做数据库,可以吗?我会尝试您的方法并提供反馈。
    猜你喜欢
    • 2015-06-19
    • 1970-01-01
    • 2019-03-04
    • 1970-01-01
    • 1970-01-01
    • 2018-07-10
    • 1970-01-01
    • 1970-01-01
    • 2014-01-04
    相关资源
    最近更新 更多