laravel-yajra数据表过滤器列与传统的渲染数据



希望有人能帮助我。

我使用的是yajra数据表,我想在一列中进行搜索,但这一列有这样的html代码:

->editColumn('last_connection', function($user){
$data = $user->last_connection < Carbon::now()->subDays(7) ? '<label class="badge badge-warning mr-2">Iddle</label>' : "";
return $data . $user->last_connection;
})

此代码验证用户最后一次连接是否在7天前,并添加一个指示这一点的标签。

所以,当我在数据表中搜索时,我想键入";iddle";或者月份,应该搜索,但没有。

这是我的自定义过滤器:

->filterColumn('name', function($query, $keyword) {
$query->whereRaw('CONCAT(fname, " ", mname, " ", lname) like ?', ["%{$keyword}%"]);
})

因为您编辑列并用一些html修改它,所以不能使用内置搜索框来检索数据,您应该使用和其他input/select标签,使用jQuery datatable提供的searchapi方法来搜索该列,它的样品给你:

var table = $('#your_table').DataTable({
processing: true,
serverSide: true,
columns: [
{
data: 'name',
name: 'name',
},
{
data: 'last_connection',
name: 'last_connection',
searchable: false
}
]});

对于您的输入,您可以使用key-up事件来触发对数据表中特定列的搜索,如

$('#search_last_connection').on('keyup', function() {
table
.columns(1)
.search(this.value)
.draw();
});

或更改选择标签的事件,如下所示:

$('#search_last_connection').on('change', function() {
table
.columns(1)
.search($("#search_last_connection option:selected").text())
.draw();
});


有关更多信息,您可以使用jQuery数据表搜索API 的文档

如果它能帮助一些人,我就是这样让它工作的:

  1. 必须在查询中添加addSelect(在我的情况下,也是西班牙语翻译(:
DB::statement("SET lc_time_names = 'es_CO';");
$users = User::query()
->select('users.*')
->addSelect(DB::raw("DATE_FORMAT(last_connection,'%W %d %M %Y - %r') as last_connection2"));

然后自定义过滤器Column:

->filterColumn('last_connection2', function ($query, $keyword){
DB::statement("SET lc_time_names = 'es_CO';");
$query->whereRaw("DATE_FORMAT(last_connection,'%W %d %M %Y - %r') like ?", ["%$keyword%"]);
})

最新更新