【问题标题】:How do I display pagination in Yii2 GridView?如何在 Yii2 GridView 中显示分页?
【发布时间】:2020-11-08 19:01:27
【问题描述】:

我正在获取我的 dataProvider,我尝试从中删除一些不符合所需条件的模型。此过滤器与 SQL 无关,因此我无法将其直接应用于查询。在我看来,如果我让数据提供者保持原样,则会显示分页链接。但是在我应用过滤器删除不需要的模型后,分页链接消失了。我尝试在我的新 dataProvider 上设置分页,但没有任何效果。

这是我在控制器操作中的代码:

 $request = Yii::$app->request;
    $search_model = new StaffEmploymentListViewSearch();
    $data_provider = $search_model->search($request->queryParams);

    $models = $data_provider->models;
    for($k=0;$k<count($models);$k++)
    {
        if($models[$k]->employ === null){
            unset($models[$k]);
        }
    }
  
    $config = [
        'pageParam' => 'page',
        'pageSizeParam' => 'per-page',
        'forcePageParam' => true,
        'route' => null,
        'params' => null,
        'urlManager' => null,
        'validatePage' => true,
        'totalCount' => 5214,
        'defaultPageSize' => 20,
        'pageSizeLimit' => [
            '0' => 1,
            '1' => 50
        ],
        'pagesize' => 20
    ];
 
    $data_provider->setModels($models);
    $data_provider->setPagination($config);

    return $this->render('all-staff',[
        'dataProvider' => $data_provider,
        'searchModel' => $search_model
    ]);

这是我的搜索方法:

$query = StaffEmploymentListView::find()
            ->SELECT([
                'PAYROLL_NO', 
                'BIRTH_DATE',
                "ADD_MONTHS(BIRTH_DATE, 70 * 12) AS RETIRE_DATE"
            ]);
    
    // add conditions that should always apply here
    $dataProvider = new ActiveDataProvider([
        'query' => $query,
        'sort' => false,
        'pagination' => [
            'pagesize' => 20,
        ],
    ]);

我该怎么做?

【问题讨论】:

  • 你能提供你想要实现的sql吗,还有为什么你不只使用sql查询来从那些雇佣状态等于null的乞讨的模型中删除?你能提供你的搜索方法吗?
  • @SergheiLeonenco 我的过滤器与 sql 无关。
  • 为了更好地帮助你展示你的search方法。
  • @SergheiLeonenco 我已编辑问题以包含搜索方法。
  • 1) 您的记录可能少于 20 条吗? 2) 试试pageSize 代替pagesize(大写字母S)

标签: php yii2 kartik-v yii2-active-records


【解决方案1】:

尝试使用ArrayDataProvider

    $query = StaffEmploymentListView::find()
            ->select([
                'PAYROLL_NO', 
                'BIRTH_DATE',
                "ADD_MONTHS(BIRTH_DATE, 70 * 12) AS RETIRE_DATE"
            ]);
    
    $allModels = [];
    foreach ($query->all as $staffEmployment)
    {
        if ($model->employ === null){
            $allModels[] = $model;
        }
    }

    $dataProvider = new ArrayDataProvider([
        'allModels' => $allModels,
        'pagination' => [
            'pageSize' => 20,
        ],
        'sort' => false
    ]);

    return $this->render('all-staff',[
        'dataProvider' => $data_provider,
        'searchModel' => $search_model // ???
    ]);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-07-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多