2014-04-10 7 views
66

In Yii questo codice funziona per impostazione predefinita l'ordinamento:yii2 dati provider predefinito di ordinamento

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

Come ordinamento predefinito può essere impostato in yii2?

provato sotto il codice, ma nessun risultato:

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

risposta

122

Penso che ci sia una soluzione adeguata

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

Official doc link

+0

Questa soluzione funziona ma la ricerca nell'indice non funziona ora –

28

O

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

È più compatibile con l'output GII predefinito – userlond

5

defaultOrder contengono un array dove key è un nome di colonna e value è un SORT_DESC o SORT_ASC ecco perché sotto il codice 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 ordinazione forniti dagli utenti finali (attraverso la configurazione di sorta) verrà aggiunto al orderBy esistente clausola. Eventuali limiti esistenti e clausole di compensazione verranno sovrascritte dalla richiesta di impaginazione da parte degli utenti finali (tramite la configurazione di impaginazione).

È possibile dettaglio imparare da Yii2 Guide of Data Provider

Ordinamento Passando oggetto Ordina 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(); 
0

è possibile modificare il modello di ricerca come questo

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