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


99

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?

J'ai essayé le code ci-dessous, mais aucun résultat:

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

Réponses:



42

Ou

       $dataProvider->setSort([
        'defaultOrder' => ['topic_order'=>SORT_DESC],
        'attributes' => [...

1
Il est plus compatible avec la sortie GII par défaut
userlond

15

defaultOrder contient un tableau où key est un nom de colonne et la valeur est un SORT_DESCou SORT_ASCc'est pourquoi le code ci-dessous ne fonctionne pas.

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

Bonne manière

$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 classement 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 pagination).

Vous pouvez détailler apprendre du guide Yii2 du fournisseur de données

Trier en passant l'objet Trier 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();

6

si vous avez CRUD (index) et que vous avez besoin de définir le tri par défaut de votre contrôleur pour GridView, ou ListView, ou plus ... Exemple

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 devez ajouter

$dataProvider->sort->defaultOrder = ['id' => SORT_DESC];

2

Essayez celui-ci

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

$sort = $dataProvider->getSort();

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

$dataProvider->setSort($sort);

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

-1

vous pouvez modifier le modèle de recherche comme ceci

$dataProvider = new ActiveDataProvider([
        'query' => $query,
        'sort' => [
            'defaultOrder' => ['user_id ASC, document_id ASC']
        ]
    ]);

-2
    $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]]
                                ]); 
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.