从数据表过滤器开始

时间:2016-04-07 06:27:06

标签: jquery laravel datatable datatables eloquent

我添加了许多分组在我的数据表顶部的复选框过滤器。例如,组城市依赖于来自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>

结果:

enter image description here

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

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

我在Laravel和Laravel-Datatable包中使用数据表。

1 个答案:

答案 0 :(得分: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