php Yii2 数据提供者默认排序
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/22993777/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Yii2 data provider default sorting
提问by Sarvar Nishonboev
In Yii 1.1 this code works for default sorting:
在 Yii 1.1 中,此代码适用于默认排序:
$dataProvider = new CActiveDataProvider('article',array(
'sort'=>array(
'defaultOrder'=>'id DESC',
),
));
How default sorting can be set in Yii2?
Yii2中如何设置默认排序?
Tried below code, but no result:
试过下面的代码,但没有结果:
$dataProvider = new ActiveDataProvider([
'query' => $query,
'sort' => ['defaultOrder'=>'topic_order asc']
]);
回答by Alex
I think there's proper solution
我认为有适当的解决方案
$dataProvider = new ActiveDataProvider([
'query' => $query,
'sort'=> ['defaultOrder' => ['topic_order'=>SORT_ASC]]
]);
回答by Kristīne Glode
Or
或者
$dataProvider->setSort([
'defaultOrder' => ['topic_order'=>SORT_DESC],
'attributes' => [...
回答by Parth Chavda
defaultOrdercontain a array where key is a column name and value is a SORT_DESC
or SORT_ASC
that's why below code not working.
defaultOrder包含一个数组,其中键是列名,值是 a SORT_DESC
或者 SORT_ASC
这就是为什么下面的代码不起作用。
$dataProvider = new ActiveDataProvider([
'query' => $query,
'sort' => ['defaultOrder'=>'topic_order asc']
]);
Correct Way
正确方式
$dataProvider = new ActiveDataProvider([
'query' => $query,
'sort' => [
'defaultOrder' => [
'topic_order' => SORT_ASC,
]
],
]);
Note: If a query already specifies the orderBy clause, the new ordering instructions given by end users (through the sort configuration) will be appended to the existing orderBy clause. Any existing limit and offset clauses will be overwritten by the pagination request from end users (through the pagination configuration).
注意:如果查询已经指定了 orderBy 子句,则最终用户给出的新排序指令(通过排序配置)将附加到现有的 orderBy 子句中。任何现有的限制和偏移条款都将被最终用户的分页请求(通过分页配置)覆盖。
You can detail learn from Yii2 Guide of Data Provider
你可以详细学习 Yii2数据提供者指南
Sorting By passing Sort object in query
通过在查询中传递 Sort 对象进行排序
$sort = new Sort([
'attributes' => [
'age',
'name' => [
'asc' => ['first_name' => SORT_ASC, 'last_name' => SORT_ASC],
'desc' => ['first_name' => SORT_DESC, 'last_name' => SORT_DESC],
'default' => SORT_DESC,
'label' => 'Name',
],
],
]);
$models = Article::find()
->where(['status' => 1])
->orderBy($sort->orders)
->all();
回答by Andrey Matveev
if you have CRUD (index) and you need set default sorting your controller for GridView, or ListView, or more... Example
如果您有 CRUD(索引)并且您需要为 GridView、ListView 或更多设置默认排序控制器...示例
public function actionIndex()
{
$searchModel = new NewsSearch();
$dataProvider = $searchModel->search(Yii::$app->request->queryParams);
// set default sorting
$dataProvider->sort->defaultOrder = ['id' => SORT_DESC];
return $this->render('index', [
'searchModel' => $searchModel,
'dataProvider' => $dataProvider,
]);
}
you need add
你需要添加
$dataProvider->sort->defaultOrder = ['id' => SORT_DESC];
回答by user210195
Try to this one
试试这个
$dataProvider = new ActiveDataProvider([
'query' => $query,
]);
$sort = $dataProvider->getSort();
$sort->defaultOrder = ['id' => SORT_ASC];
$dataProvider->setSort($sort);
回答by Suraj Vaghela
$dataProvider = new ActiveDataProvider([
'query' => $query,
'sort'=> ['defaultOrder' => ['iUserId'=>SORT_ASC]]
]);
回答by brahmeswara rao Kamineni
you can modify search model like this
您可以像这样修改搜索模型
$dataProvider = new ActiveDataProvider([
'query' => $query,
'sort' => [
'defaultOrder' => ['user_id ASC, document_id ASC']
]
]);
回答by jagjit singh
$modelProduct = new Product();
$shop_id = (int)Yii::$app->user->identity->shop_id;
$queryProduct = $modelProduct->find()
->where(['product.shop_id' => $shop_id]);
$dataProviderProduct = new ActiveDataProvider([
'query' => $queryProduct,
'pagination' => [ 'pageSize' => 10 ],
'sort'=> ['defaultOrder' => ['id'=>SORT_DESC]]
]);