2016-08-22 41 views
0

所以我這是在控制器中創建一個這樣的數據提供程序:Yii2 - 使用數據提供程序多次使用不同的排序

$modelSearch = new SearchModel(); 
$data_provider = $modelSearch->search(Yii::$app->request->queryParams); // returns the data provider 

然後我用$ data_provider的觀點是這樣的:

GridView::widget([ 
    'dataProvider' => $data_provider, 
    'export'  => false, 
    'columns'  => [ 
     ... 
    ], 
... 

但現在我想使用相同的數據從$ data_provider 但沒有分頁和其他排序規格

試過,但不起作用:

$data_provider->sort = ['defaultOrder'=> ['column_a' => SORT_ASC, 'column_b' => SORT_DESC]] 
$data_provider->pagination = false; 

我想這是因爲數據已經與->search()方法檢索。我是否需要創建一個全新的搜索模型類?只是爲了得到不同的排序?

在此先感謝!

回答

0

之前,我問的問題我不知道數據提供程序已經獲取上創建的數據。因此,更改dataProvider的屬性不會執行其他搜索,它會執行不同的排序,但會使用已檢索的相同數據。

我最終作出了新的方法,在searchModel類是這樣的:

public function searchByCreatedAt() { 
    $query = Model::find()->orderBy(['created_at' => SORT_ASC]); 

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

    ... 
} 
1

你應該使用兩個數據提供程序如:

$modelSearch = new SearchModel(); 
$data_provider = $modelSearch->search(Yii::$app->request->queryParams); 

$data_provider2 = $data_provider; 
$data_provider2->pagination = false; 
$data_provider2->sort = ['defaultOrder'=> ['column_a' => SORT_ASC, 'column_b' => SORT_DESC]] 


return $this->render('your_view', [ 
     'searchModel' => $searchModel, 
     'dataProvider' => $data_provider, 
     'dataProvider2' => $data_provider2, 
    ]); 
+0

我會嘗試這個明天馬上!如果有效,我會接受你的答案。 – MDijkstra

+0

@Funnydutchman。好吧,讓我知道 – scaisEdge

+0

它沒有像我想要的那樣工作。我問這個問題是錯誤的,說我想使用相同的數據(我想使用相同的搜索)。我認爲排序工作,但數據仍然是第一個dataProvider相同。這是因爲它在「$ modelSearch-> search($ params)」的那一刻填充了dataProvider,而不是在使用$ dataProvider(例如$ dataProvider-> getModels())的那一刻。我最終創建了一個新的搜索方法「$ modelSearch-> customSearch()」,它提供了另一個數據提供者。無論如何謝謝你的答案,但我不能接受它。 – MDijkstra

相關問題