【问题标题】:laravel yajra datatable filter column with aditional render datalaravel yajra 数据表过滤列,带有额外的渲染数据
【发布时间】:2022-11-04 01:41:43
【问题描述】:

希望有人能帮助我。

我正在使用 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 天,并添加一个标签来表明这一点。

所以,当我在数据表中搜索时,我想输入“中号”或月份,应该搜索,但没有。

这是我的自定义过滤器:

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

【问题讨论】:

    标签: laravel datatable yajra-datatable


    【解决方案1】:

    因为您编辑了该列并使用一些 html 对其进行了修改,所以您不能使用内置搜索框来检索数据, 您应该使用 jQuery 数据表提供的搜索 API 方法和其他输入/选择标签来搜索此列, 它为您提供的样本:

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

    对于您的输入,您可以使用按键事件来触发对数据表中特定列的搜索,如下所示

     $('#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 数据表 search API 的文档

    【讨论】:

      【解决方案2】:

      如果它可以帮助某人,这就是我能够让它工作的方式:

      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"));
        ´´´
        
        Then customize the filterColumn:
        
        ´´´
        ->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%"]);
                   })
        ´´´
        

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-02-15
        • 1970-01-01
        • 2017-05-05
        • 2011-07-05
        • 2020-03-03
        • 1970-01-01
        • 1970-01-01
        • 2016-09-13
        相关资源
        最近更新 更多