一个搜索表单到同一页面中的3个Gridview

时间:2017-12-21 14:05:37

标签: yii2

我有一个包含3个GRIDVIEW组件的INDEX页面(模型键,模型产品,模型指示器)。在同一页面上,我有一个带有下拉列表(公司)的搜索表单。

我需要:当您选择公司02时,3 GRIDVIEW仅过滤公司记录02。

_search.php

<?php

use yii\helpers\Html;
use yii\widgets\ActiveForm;
use kartik\date\DatePicker;
?>

<div class="ideas-search">

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

    <?= $form->field($model, 'pa')->dropdownList([..])?>

...

的index.php

<?php echo $this->render('_search', ['model' => $searchBase]); ?>

        <?php Pjax::begin(['id' => '1']) ?>
        <?= GridView::widget([
            'id' => 'grid1',
            'dataProvider' => $dataProviderKey,
            'columns' => [
                ...
            ],
        ]); ?>
        <?php Pjax::end() ?>

        <?php Pjax::begin(['id' => '2']) ?>
        <?= GridView::widget([
            'id' => 'grid2',
            'dataProvider' => $dataProviderProduct,
            'columns' => [
                ...
            ],
        ]); ?>
        <?php Pjax::end() ?>

        <?= GridView::widget([
            'dataProvider' => $dataProviderIndicators,
            'summary' => false,
            'columns' => [
                ...
            ],
        ]); ?>

==更新==

BaseController

public function actionIndex()
{
    $searchBase = new BaseSearch();
    $searchBase->pa = 0;
    $searchBase->data = date("Y-m-d");
    $dataProviderBase = $searchBase->search(Yii::$app->request->queryParams);

    $searchMobilizadores = new MobilizadoresSearch();
    $dataProviderMobilizadores = $searchMobilizadores->search(Yii::$app->request->queryParams);

    $searchIndicadores = new IndicadoresSearch();
    $dataProviderIndicadores = $searchIndicadores->search(Yii::$app->request->queryParams);

    return $this->render('index', [
        'searchBase' => $searchBase,
        'dataProviderBase' => $dataProviderBase,
        'searchMobilizadores' => $searchMobilizadores,
        'dataProviderMobilizadores' => $dataProviderMobilizadores,
        'searchIndicadores' => $searchIndicadores,
        'dataProviderIndicadores' => $dataProviderIndicadores,
    ]);
}

1 个答案:

答案 0 :(得分:1)

不要忘记在Gridview Widget中定义filterModel

查看文件

GridView::widget([
    'dataProvider' => $dataProvider,
    'filterModel' => $searchModel,

第一种方法:

您可以使用从联合所有3个表的模型扩展的单个模型,并为其创建搜索模型。如果你坚持在视图中分离所有3个表,你可以只为每个网格声明不同的列。 为实现这一目的,您可以创建一个视图并使用gii工具生成视图文件。

棘手的部分是1个模型只能容纳一个表,除了你联合。但是,通过连接表,您可能会获得额外的行,这些行不一定是您的$dataProviderKey网格所必需的。

第二种方法:

从每个Yii::$app->request->get()的{​​{1}}添加过滤器手动检查参数。

控制器文件

$dataprovider

== UPDATE ==

要回答您的更新问题,您可以将基本搜索属性分配给其他搜索模式的相应属性,如下所示:

if(isset($id = Yii::$app->request->get('company_id'))) {
    $dataProviderKey->query->andFilterWhere(['company.id' => $id]);
    $dataProviderProduct->query->andFilterWhere(['company.id' => $id]);
    $dataProviderIndicators->query->andFilterWhere(['company.id' => $id]);
}