jquery Laravel如何在yajra datatable中按创建日期排序

57hvy0tb  于 2023-04-20  发布在  jQuery
关注(0)|答案(4)|浏览(112)

我想按创建日期对datatable进行排序,同时以特殊格式显示日期我尝试了下面的代码,但没有工作,问题是我可以显示日期,但在格式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' 
            } }
0pizxfdo

0pizxfdo1#

使用js中的顺序。

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

其中1是col位置。

hmae6n7t

hmae6n7t2#

请按照以下步骤解决问题
控制器

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
nzk0hqpo

nzk0hqpo3#

如果Datatables::of($data)的输入$dataCollection(不是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

iqjalb3h

iqjalb3h4#

(100%工作)控制器

->editColumn('created', function ($user) {
                return [
                    'display' => date("h:i A, d/m/Y",strtotime($user->created)),
                    'timestamp' => strtotime($user->created)
                ];
            })

JS

{ 
        'name': 'created', 
        'data': { 
                    '_': 'created.display', 
                    'sort': 'created.timestamp' 
         } 
}

相关问题