友
我有一个包含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,
]);
}
答案 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]);
}