Dans Yii 1.1, ce code fonctionne pour le tri par défaut:
$dataProvider = new CActiveDataProvider('article',array(
'sort'=>array(
'defaultOrder'=>'id DESC',
),
));
Comment le tri par défaut peut-il être défini dans Yii2?
Essayé ci-dessous le code, mais aucun résultat:
$dataProvider = new ActiveDataProvider([
'query' => $query,
'sort' => ['defaultOrder'=>'topic_order asc']
]);
Je pense qu'il y a une bonne solution
$dataProvider = new ActiveDataProvider([
'query' => $query,
'sort'=> ['defaultOrder' => ['topic_order'=>SORT_ASC]]
]);
Ou
$dataProvider->setSort([
'defaultOrder' => ['topic_order'=>SORT_DESC],
'attributes' => [...
defaultOrder contient un tableau où key est un nom de colonne et la valeur est un SORT_DESC
ou un SORT_ASC
c'est pourquoi le code ci-dessous ne fonctionne pas.
$dataProvider = new ActiveDataProvider([
'query' => $query,
'sort' => ['defaultOrder'=>'topic_order asc']
]);
Correct Way
$dataProvider = new ActiveDataProvider([
'query' => $query,
'sort' => [
'defaultOrder' => [
'topic_order' => SORT_ASC,
]
],
]);
Remarque: Si une requête spécifie déjà la clause orderBy, les nouvelles instructions de commande données par les utilisateurs finaux (via la configuration de tri) seront ajoutées à la clause orderBy existante. Toutes les clauses de limite et de décalage existantes seront écrasées par la demande de pagination des utilisateurs finaux (via la configuration de la pagination).
Vous pouvez détailler l’apprentissage de Yii2 Guide du fournisseur de données
Tri En passant l'objet de tri dans la requête
$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();
Essayer celui-ci
$dataProvider = new ActiveDataProvider([
'query' => $query,
]);
$sort = $dataProvider->getSort();
$sort->defaultOrder = ['id' => SORT_ASC];
$dataProvider->setSort($sort);
si vous avez CRUD (index) et que vous avez besoin de définir par défaut le tri de votre contrôleur pour GridView, ou ListView, ou plus ....
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,
]);
}
vous avez besoin d'ajouter
$dataProvider->sort->defaultOrder = ['id' => SORT_DESC];