laravel 如何在 yajra 数据表中按创建日期排序

Posted

技术标签:

【中文标题】laravel 如何在 yajra 数据表中按创建日期排序【英文标题】:laravel how to order by created date in yajra datatable 【发布时间】:2020-07-05 06:19:26 【问题描述】:

我想按创建日期对数据表进行排序,同时以特殊格式显示日期 我尝试了下面的代码但没有用,问题是我可以显示日期,但在格式为 D d M-Y 的文本中,我需要将日期排序为日期而不是文本

控制器

        ->addColumn('created_at', function ($data) 
                       return [
                               'display' => date('D d M-Y', strtotime($data->created_at)),
                               'timestamp' => ($data->created_at)
                           ];
                          )

jquery:

             name: ' order_date', data:  '_': ' order_date.display', 'sort': ' order_date.timestamp' 
             

【问题讨论】:

【参考方案1】:

请按照以下步骤解决问题

控制器

  return Datatables::of($data)
            ->addIndexColumn()
            ->editColumn('created_at', function ($user) 
                return [
                    'display' => e($user->created_at->format('m/d/Y')),
                    'timestamp' => $user->created_at->timestamp
                ];
            )
            ->filterColumn('created_at', function ($query, $keyword) 
                $query->whereRaw("DATE_FORMAT(created_at,'%m/%d/%Y') LIKE ?", ["%$keyword%"]);
            )
            ->make(true);

Js

columns: [
        
            data: 'index',
            defaultContent: '',
            orderable: false,
            searchable: false,
            render: function (data, type, row, meta) 
                return meta.row + meta.settings._iDisplayStart + 1; //auto increment
            
        ,
        data: 'site_name', name: 'site_name',
        data: 'site_url', name: 'site_url',
        data: 'key', name: 'key', defaultContent: "-",
        
            data: 'created_at',
            type: 'num',
            render: 
                _: 'display',
                sort: 'timestamp'
            
        ,
        data: 'status', name: 'status',
        data: 'action', name: 'action', orderable: false, searchable: false,
    ],
   
    order: [[4, "DESC"]] //column indexes is zero based

【讨论】:

【参考方案2】:

使用js中的顺序。

  order: [[ 1, 'desc' ]],

其中 1 是 col 位置。

【讨论】:

问题是我可以显示日期,但是在 D d M-Y 格式的文本中,我需要将日期排序为日期而不是文本 然后使用 "order": [] 并在控制器中对查询进行排序。 我认为你没有得到我想要的,解决方案就在这里,但 ddint 得到它github.com/yajra/laravel-datatables/issues/1404【参考方案3】:

如果您输入的$dataDatatables::of($data)Collection(不是Builder),那么您需要更改为

  name: ' order_date', data:  '_': ' order_date.display', 'sort': ' order_date.timestamp' 
             

 name: ' order_date.timestamp', data:  '_': 'display', 'sort': 'timestamp' 
                 

通过这样做,Yajra\DataTables\CollectionDataTable 中的 getSorter() 可以提取正确的属性,在您的示例中为 order_date.timestamp,以处理排序。

参考:https://github.com/yajra/laravel-datatables/issues/1404#issuecomment-506623825

【讨论】:

以上是关于laravel 如何在 yajra 数据表中按创建日期排序的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Laravel 的一页上拥有多个 Yajra 数据表?

Laravel,Yajra Datatable,如果 y 那么如何返回 Yes else No

如何将数据库索引与 Datatables 和 yajra/laravel-datatables 一起使用

如何在 yajra 数据表 laravel 8 的 html 中隐藏描述列但在导出 CSV 中显示

yajra/laravel-datatables 搜索不适用于 laravel 5.4

如何在yajra datatable列中显示图像,laravel5.3