当用户首次访问该页面时,ListEntries
表按ID升序排列,并且表头中的任何排序图标均未激活。
我希望按自己选择的一列对ListEntries
表进行排序,包括使该列旁边的图标处于活动状态(升序或降序)。
有没有一种方法可以使ListEntries
表在用户访问页面时按我选择的列排序?
答案 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.*');
}
]);
答案 2 :(得分:0)
在控制器的setup()
方法中,您可以使用:
$this->crud->orderBy('name', 'DESC');
您传递给orderBy()
语句的所有内容都将用于口才查询。
默认情况下,真实属性的列(在数据库中具有对应的列)应为orderable
。但是,您也可以手动为列指定'orderable' => true
或define your own order logic。请注意,默认情况下,关系列(1-n,nn),model_function
或model_function
列不可排序,但是您可以 使它们与orderLogic
一致。
希望有帮助。