Yii2 - 多次使用dataProvider进行不同的排序

时间:2016-08-22 13:47:50

标签: php 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()方法检索了数据。我是否需要创建一个全新的搜索模型类?只是为了获得不同的排序?

提前致谢!

2 个答案:

答案 0 :(得分:1)

您应该使用两个dataProvider,例如:

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

答案 1 :(得分:0)

在我问这个问题之前,我不知道dataProvider已经检索了创建时的数据。因此,更改dataProvider的属性不会进行另一次搜索,它会进行不同的排序,但是已经检索了相同的数据。

<强> 答案 我最终在searchModel类中创建了一个新方法,如下所示:

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

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

    ...
}