【问题标题】:laravel how to order by created date in yajra datatablelaravel 如何在 yajra 数据表中按创建日期排序
【发布时间】: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' 
            } }

【问题讨论】:

    标签: jquery laravel datatable


    【解决方案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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-03-23
        • 2020-07-02
        • 2020-08-18
        • 1970-01-01
        • 2019-05-12
        • 1970-01-01
        • 1970-01-01
        • 2011-07-02
        相关资源
        最近更新 更多