web-dev-qa-db-fra.com

Tri par défaut du fournisseur de données Yii2

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']
]);
79
Sarvar Nishonboev

Je pense qu'il y a une bonne solution

 $dataProvider = new ActiveDataProvider([
     'query' => $query,
     'sort'=> ['defaultOrder' => ['topic_order'=>SORT_ASC]]
 ]);

Lien doc officiel

143
Alex

Ou 

       $dataProvider->setSort([
        'defaultOrder' => ['topic_order'=>SORT_DESC],
        'attributes' => [...
33
Kristīne Glode

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();
7
Parth Chavda

Essayer celui-ci

$dataProvider = new ActiveDataProvider([
    'query' => $query,
]);

$sort = $dataProvider->getSort();

$sort->defaultOrder = ['id' => SORT_ASC];

$dataProvider->setSort($sort);
2
user210195

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];
0
Andrey Matveev