【问题标题】:Yii2 - Use dataProvider multiple times with different sortingYii2 - 以不同的排序多次使用 dataProvider
【发布时间】:2016-08-24 17:19:39
【问题描述】:

所以我有一个数据提供者,它是在这样的控制器中创建的:

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

提前致谢!

【问题讨论】:

    标签: php yii2


    【解决方案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,
        ]);  
    

    【讨论】:

    • 我明天马上试试!如果可行,我会接受你的回答。
    • 它没有像我想要的那样工作。我问错了问题,说我想使用相同的数据(我想使用相同的搜索)。我认为排序有效,但数据仍然与第一个 dataProvider 相同。那是因为它在他执行“$modelSearch->search($params)”的那一刻填充了 dataProvider,而不是在您使用 $dataProvider 的那一刻(例如 $dataProvider->getModels())。我最终创建了一个新的搜索方法“$modelSearch->customSearch()”,它提供了另一个数据提供者。还是谢谢你的回答,但我不能接受。
    【解决方案2】:

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

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

    public function searchByCreatedAt() {
        $query = Model::find()->orderBy(['created_at' => SORT_ASC]);
    
        $dataProvider = new ActiveDataProvider([
            'query' => $query,
            'pagination' => false,
        ]);
    
        ...
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多