In Yii 1.1 funktioniert dieser Code für die Standardsortierung:
$dataProvider = new CActiveDataProvider('article',array(
'sort'=>array(
'defaultOrder'=>'id DESC',
),
));
Wie kann die Standardsortierung in Yii2 eingestellt werden?
Unter Code versucht, aber kein Ergebnis:
$dataProvider = new ActiveDataProvider([
'query' => $query,
'sort' => ['defaultOrder'=>'topic_order asc']
]);
Ich denke, es gibt eine richtige Lösung
$dataProvider = new ActiveDataProvider([
'query' => $query,
'sort'=> ['defaultOrder' => ['topic_order'=>SORT_ASC]]
]);
Oder
$dataProvider->setSort([
'defaultOrder' => ['topic_order'=>SORT_DESC],
'attributes' => [...
defaultOrder enthält ein Array, bei dem key ein Spaltenname ist und value ein SORT_DESC
oder SORT_ASC
ist. Deshalb funktioniert der folgende Code nicht.
$dataProvider = new ActiveDataProvider([
'query' => $query,
'sort' => ['defaultOrder'=>'topic_order asc']
]);
Der richtige Weg
$dataProvider = new ActiveDataProvider([
'query' => $query,
'sort' => [
'defaultOrder' => [
'topic_order' => SORT_ASC,
]
],
]);
Hinweis: Wenn eine Abfrage bereits die orderBy-Klausel angibt, werden die neuen, von den Endbenutzern (durch die Sortierkonfiguration) gegebenen Bestellanweisungen an die vorhandene orderBy-Klausel angehängt. Alle vorhandenen Limit- und Offset-Klauseln werden durch die Paginierungsanforderung von Endbenutzern (durch die Paginierungskonfiguration) überschrieben.
Sie können ausführlich von Yii2 Guide of Data Provider lernen
Sortieren Durch Übergeben des Sort-Objekts in der Abfrage
$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();
Versuchen Sie es mit diesem
$dataProvider = new ActiveDataProvider([
'query' => $query,
]);
$sort = $dataProvider->getSort();
$sort->defaultOrder = ['id' => SORT_ASC];
$dataProvider->setSort($sort);
wenn Sie über CRUD (Index) verfügen, müssen Sie den Controller standardmäßig für GridView oder ListView oder mehr ....__ sortieren. Beispiel
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,
]);
}
sie müssen hinzufügen
$dataProvider->sort->defaultOrder = ['id' => SORT_DESC];