首页 > 解决方案 > Yii2:加载 index.php 时如何不填充 GridView

问题描述

我有一个使用Gii Code Generatorindex.php生成的文件。它有一个 GridView,其中包含我的数据库表的数据。它有 536000 行,所以它移动得非常慢。有时甚至超过 30 秒,所以页面根本没有加载。

我想启动我的索引文件(http://localhost:8080/persons/index.php),但使用一个空的 GridView(或没有 GridView),当用户使用文件的过滤器时可以填充它_search.php

我的 index.php 文件:

<? Pjax::begin() ?>
<? echo $this->render('_search', ['model' => $searchModel]) ?>

<?= GridView::widget([
    'dataProvider' => $dataProvider,
    'filterModel' => $searchModel,
    'columns' => [
        'id',
        'name',
        'details',
    ],
]) ?>
<? Pjax::end() ?>

我的 _search.php 文件:

<?php $form = ActiveForm::begin([
    'action' => ['index'],
    'method' => 'get',
    'options' => [
        'data-pjax' => 1
    ],
]) ?>

<?= $form->field($model, 'name') ?>
<?= $form->field($model, 'datails') ?>

<div class="form-group">
    <?= Html::submitButton('Search', ['class' => 'btn btn-primary']) ?>
    <?= Html::resetButton('Reset', ['class' => 'btn btn-default']) ?>
</div>

<? ActiveForm::end() ?>

我的 peopleController.php 文件:

public function actionIndex()
{
    $searchModel = new PersonsSearch();
    $dataProvider = $searchModel->search(Yii::$app->request->queryParams);

    return $this->render('index', [
        'searchModel' => $searchModel,
        'dataProvider' => $dataProvider,
    ]);
}

标签: gridviewyii2pjaxdatabase-table

解决方案


您可以使用查询参数,例如“限制”并将其提供给索引页面和其他页面。而不是在 PersonsSearch 模型中的 DataProvider 构造中使用它。或使用“分页”属性。

public $limit = null;

public function search()
{

    $query = Person::find();

    if ($this->limit) {
        $query->limit($this-limit);
    }

    $provider = new ActiveDataProvider([
        'query' => $query,
        'pagination' => [
            'pageSize' => 20,
        ],
    ]);

    return $provider;
}

推荐阅读