2014-04-10 14 views
66

W Yii ten kod działa dla domyślnie Sortowanie:yii2 dane sortowania

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

Jak domyślnego sortowania można ustawić w yii2?

próbował poniżej kod, ale nie wynik:

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

Odpowiedz

122

myślę, że jest właściwym rozwiązaniem

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

Official doc link

+0

To rozwiązanie działa, ale wyszukiwanie w indeksie teraz nie działa. –

28

Albo

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

Jest bardziej kompatybilny z domyślnym wyjściem GII – userlond

5

defaultOrder zawiera tablicę, w której klucz jest nazwą kolumny, a wartość to SORT_DESC lub SORT_ASC, dlatego poniżej kodu nie działa.

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

Correct Way

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

Uwaga: Jeśli zapytanie już określa klauzulę orderby, nowe instrukcje zamawiania podane przez użytkowników końcowych (poprzez konfigurację sortowania) zostanie dołączona do istniejącej orderby klauzula. Wszelkie istniejące klauzule limitów i korekcji zostaną nadpisane przez żądanie paginacji od użytkowników końcowych (poprzez konfigurację stronicowania).

Można szczegółowo dowiedzieć się z Yii2 Guide of Data Provider

sortując przechodzącej Sortuj obiektu w zapytaniu

$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

można modyfikować wyszukiwarki modelu podobnego tego

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