首页 > 解决方案 > 用于排序的 orderColumn 不适用于 yajra 数据表

问题描述

我在 laravel 版本上使用Yajra 数据表8.0包。

在此之前我使用的是旧版本,我使用->orderBy('created_at', 'desc')基于特定列对数据进行排序。

但在较新的版本中,建议使用一种orderColumn方法进行排序。但这对我不起作用。

假设我想将Post我网站的所有内容都排序为 desc on field created_at。为此我写了这个:

$posts =
                Post::select(['post_id', 'post_title', 'start_date', 'end_date', 'picture', 'active', 'created_at', 'deleted_at']);

            if ($request->has('showDeleted') && $request->get('showDeleted') == 1) {
                $posts = $posts->withTrashed();
            }

            $datatable = app('datatables')->of($posts)
                ->orderColumn('created_at', '-created_at $1');

            return $datatable->make(true);

正如你所看到的,我用过orderColumn但酸痛不起作用。而且我不知道如何正确使用它。

标签: phplaravelyajra-datatable

解决方案


也许为时已晚,但这也需要一个答案。

orderColumn 函数说明在这里

“在某些情况下,您可能希望对特定列使用自定义顺序 sql”意味着此功能不适用于正常情况。一般情况下,当你想按表格的某个字段排序时,只需点击该字段的列名,订单就会自动运行,无需执行任何操作。你的情况只是正常顺序。无需使用 orderColumn 函数。

如果您想使用 orderColumn 函数。这是如何使用它:

使用 orderColumn 的示例

这不会在第一次加载数据表时运行,您必须单击表列名称 (updated_at) 以使其执行 Order 查询。

如果你想通过 updated_at 设置默认顺序:

$html = $htmlBuilder
        ->parameters([
            'order' => [5, 'asc'] // here is the updated_at column number
        ])
        ->addColumn([
            'data' => 'id',
            'name' => 'id',
            'title' => 'id',
        ])
        ->addColumn([
            'data' => 'start_date',
            'name' => 'start_date',
            'title' => 'start_date',
        ])
        ->addColumn([
            'data' => 'end_date',
            'name' => 'end_date',
            'title' => 'end_date',
        ])
        ->addColumn([
            'data' => 'picture',
            'name' => 'picture',
            'title' => 'picture',
        ])
        ->addColumn([
            'data' => 'active',
            'name' => 'active',
            'title' => 'active',
        ])
        ->addColumn([
            'data' => 'created_at',
            'name' => 'created_at',
            'title' => 'created_at,
        ])
        ->addColumn([
            'data' => 'deleted_at',
            'name' => 'deleted_at',
            'title' => 'deleted_at',
        ]);
return view('path.to.view', compact('html'));

推荐阅读