所以我有一个数据提供者,它在这样的控制器中创建:
$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 :(得分: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,
]);
...
}