如何在Backpack for Laravel中添加ListEntries表的默认顺序?

时间:2019-07-29 12:27:56

标签: laravel backpack-for-laravel

当用户首次访问该页面时,ListEntries表按ID升序排列,并且表头中的任何排序图标均未激活。

我希望按自己选择的一列对ListEntries表进行排序,包括使该列旁边的图标处于活动状态(升序或降序)。

有没有一种方法可以使ListEntries表在用户访问页面时按我选择的列排序?

3 个答案:

答案 0 :(得分:1)

这可以通过处理请求对象来完成,该对象可能在某些圈子中会被皱眉。

此解决方案还将更新相应列上的订单图标。

有多种方法可以完成此操作,但是一种方法是将以下内容添加到Controller的setupListOperation()方法中。

/** @var \Illuminate\Http\Request $request */
$request = $this->crud->getRequest();
if (!$request->has('order')) {
    $request->merge(['order' => [
        [
            'column' => 'column-index-here',
            'dir' => 'asc'
        ]
    ]]);
}

答案 1 :(得分:1)

使用这个键 orderable 它是一个布尔值

 this->crud->addColumn([
   'label'      => 'Category',
   'type'       => 'select',
   'name'       => 'category_id', // the db column for the foreign key
   'entity'     => 'category', // the method that defines the relationship in your Model
   'attribute'  => 'name', // foreign key attribute that is shown to user
   'orderable'  => true,
   'orderLogic' => function ($query, $column, $columnDirection) {
        return $query->leftJoin('categories', 'categories.id', '=', 'articles.select')
            ->orderBy('categories.name', $columnDirection)->select('articles.*');
    }
]);

Reference

答案 2 :(得分:0)

在控制器的setup()方法中,您可以使用:

$this->crud->orderBy('name', 'DESC');

您传递给orderBy()语句的所有内容都将用于口才查询。

默认情况下,真实属性的列(在数据库中具有对应的列)应为orderable。但是,您也可以手动为列指定'orderable' => truedefine your own order logic。请注意,默认情况下,关系列(1-n,nn),model_functionmodel_function列不可排序,但是您可以 使它们与orderLogic一致。

希望有帮助。