如何在 Backpack for Laravel 中添加 ListEntries table 的默认排序?

How to add a default ordering of ListEntries table in Backpack for Laravel?

当用户第一次访问该页面时,ListEntries table 按 table header 中的排序图标的 id 和 none 升序排列] 活跃。

我希望 ListEntries table 按我选择的列排序,包括激活此列旁边的图标(升序或降序)。

有没有办法让 ListEntries table 在用户访问页面时按我选择的列排序?

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

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

您传递给 orderBy() 语句的任何内容都将用于 Eloquent 查询。

默认情况下,真实属性的列(在数据库中有相应的列)应该是 orderable。但您也可以手动为列指定 'orderable' => true,或 define your own order logic。请注意,关系列 (1-n, n-n)、model_functionmodel_function 列在默认情况下不可订购,但您 可以 使它们可订购 orderLogic.

希望对您有所帮助。

这可以通过操纵请求对象来完成,这在某些圈子中可能不受欢迎。

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

有多种方法可以实现此目的,但一种方法是将以下内容添加到控制器的 setupListOperation() 方法中。

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

使用这个键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