Ordinamento predefinito del fornitore di dati Yii2


99

In Yii 1.1 questo codice funziona per l'ordinamento predefinito:

$dataProvider = new CActiveDataProvider('article',array(
    'sort'=>array(
        'defaultOrder'=>'id DESC',
    ),
));

Come può essere impostato l'ordinamento predefinito in Yii2?

Ho provato sotto il codice, ma nessun risultato:

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

Risposte:


175

Penso che ci sia una soluzione adeguata. Configura l' yii\data\Sortoggetto:

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

Link al documento ufficiale


Questa soluzione funziona ma la ricerca nell'indice non funziona ora.
Roby Sottini

42

O

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

1
È più compatibile con l'output GII predefinito
utente

15

defaultOrder contiene un array in cui la chiave è il nome di una colonna e il valore è a SORT_DESCo SORT_ASCè per questo che il codice sottostante non funziona.

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

Modo corretto

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

Nota: se una query specifica già la clausola orderBy, le nuove istruzioni di ordinamento fornite dagli utenti finali (tramite la configurazione di ordinamento) verranno aggiunte alla clausola orderBy esistente. Eventuali clausole di limite e offset esistenti verranno sovrascritte dalla richiesta di impaginazione da parte degli utenti finali (tramite la configurazione dell'impaginazione).

Puoi apprendere in dettaglio dalla Guida Yii2 del fornitore di dati

Ordinamento Passando l'oggetto Sort nella query

 $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

se hai CRUD (indice) e devi impostare l'ordinamento predefinito del controller per GridView, o ListView o altro ... Esempio

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,
    ]);
}

devi aggiungere

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

2

Prova a questo

$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

puoi modificare il modello di ricerca in questo modo

$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]]
                                ]); 
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.