【问题标题】:Yii2 - Grid view shows all the datas when using searchYii2 - 使用搜索时网格视图显示所有数据
【发布时间】:2016-09-27 15:39:10
【问题描述】:

我创建了一个Global Search,显示grid view,但这是第一次加载搜索页面或搜索字段为空并且您搜索时的问题,将显示db中的所有数据.

我在另一个视图中使用了_search.php 视图。
_search 视图:

<?php $form = ActiveForm::begin([
    'action' => ['index'],
    'method' => 'get',
]); ?>


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


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

<?php ActiveForm::end(); ?>   

主视图:

<?php echo $this->render("../ads/_search", ['model' => $model]); ?>

<?php Pjax::begin(); ?>

<?= GridView::widget([

    'dataProvider'  => $dataProvider,
    'filterModel'   => $model,
    'showOnEmpty'   => false,
    'summary'       => '',
    'showFooter'    => false,
    'showHeader'    => false,
    'columns'       => [
        'name',
        'type',
        'explanation',
        'address',
        'province_name',
        'cost',
    ],

]);?>

<?php Pjax::end(); ?> 

还需要什么吗?告诉我。

【问题讨论】:

    标签: php search gridview yii2


    【解决方案1】:

    如果要显示网格,让过滤器模型在全局搜索为空时返回一个没有结果的数据提供者

    class FilterModel extends Model {
        public $globalSearch;
        ::
        ::
        public function search($params) {
            $provider = new ActiveDataProvider(
                $query = SomeModel::find();
            );
    
            if (!$this->globalSearch) {
                $query->where('1=0'); // returns no results
                return $provider;
            }
    
            // other code to return results with filter applied
            ::
            ::
            return $provider;
        }   
    } 
    

    【讨论】:

      【解决方案2】:

      我不知道您是如何应用此 globalSearch 过滤器的,但这是网格过滤器的默认行为:当未定义过滤器时 - GridView 将显示匹配的数据项(=== 所有项)。

      但是如果你想改变这种行为,你可以在空过滤器的情况下不渲染 GridView:

      <?php echo $this->render("../ads/_search", ['model' => $model]); ?>
      
      <?php 
      
      if(!empty($model->globalSearch)){
      
          Pjax::begin(); 
      
          echo GridView::widget([
              'dataProvider' => $dataProvider,
              'filterModel' => $model,
              'showOnEmpty'=>false,
              'summary'=>'',
              'showFooter'=>false,
              'showHeader' => false,
      
              'columns' => [
                  'name',
                  'type',
                  'explanation',
                  'address',
                  'province_name',
                  'cost',
              ],
          ]);
      
          Pjax::end(); 
      }
      
      ?>  
      

      【讨论】:

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