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