Как скрыть столбцы на основе условия в yii2 gridview? - PullRequest
1 голос
/ 21 апреля 2020

Я разместил условное заявление на моей странице индекса.

Контроллер

$type ="402"; // type can me 401 and 403
 $searchModel = new MdcmetersdataSearch();
        $dataProvider = $searchModel->search(Yii::$app->request->queryParams);

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

Индекс. php

<?php
if($type == '401')
{
    $columns = [
        ['class' => 'yii\grid\SerialColumn'],

        'device_id',
        'cust_id',
        'msn',
        'current_p1',
        'current_p2',
        'current_p3',        
        'data_date_time',

        ['class' => 'yii\grid\ActionColumn'],
    ];



}else if($type == '402')
{
    $columns = [
        ['class' => 'yii\grid\SerialColumn'],

        'device_id',
        'cust_id',
        'msn',
        'voltage_p1',
        'voltage_p2',
        'voltage_p3',      
        'data_date_time',

        ['class' => 'yii\grid\ActionColumn'],
    ];
}
else if($type == "403")
{
    $columns = [
        ['class' => 'yii\grid\SerialColumn'],

        'device_id',
        'cust_id',
        'msn',
        'kwh',
        'data_date_time',

        ['class' => 'yii\grid\ActionColumn'],
    ];

}
else
{
    $columns = [
        ['class' => 'yii\grid\SerialColumn'],

        'device_id',
        'cust_id',
        'msn',
        'voltage_p1',
        'voltage_p2',
        'voltage_p3',
        'current_p1',
        'current_p2',
        'current_p3',
        'device_id',
        'kwh',


        'data_date_time',

        ['class' => 'yii\grid\ActionColumn'],
    ];

}
?>
<?=
GridView::widget([
    'dataProvider' => $dataProvider,
    'filterModel' => $searchModel,
    'columns' => $columns
]);
?>

Как указано выше, значение $type может быть 401, 402 and 403. Поэтому я пытаюсь проверить, работает ли мое состояние или нет. Поэтому я передаю 402, что означает, что должны отображаться только столбцы со значением voltages, но я получил следующий результат

enter image description here

Я хочу скрыть столбцы в красных кружках, т.е. я просто хочу показать данные этого конкретного значения $type.

Любая помощь будет принята с благодарностью.

1 Ответ

1 голос
/ 22 апреля 2020

Если вы хотите скрыть / не отображать строки без значения вольта для 402, самый простой способ - избежать выбора в поисковом запросе. Для этого вы можете добавить правильную функцию поиска 402 в модель поиска

/**
 * Creates data provider instance with search query applied
 *
 * @param array $params
 *
 * @return ActiveDataProvider
 */
public function search($params)
{
   ........

    return $dataProvider;
}


public function search402($params)
{
    $query = YourModel::find();

    $dataProvider = new ActiveDataProvider([
        'query' => $query,
    ]);

    if (!($this->load($params) && $this->validate())) {
        return $dataProvider;
    }

    $query->andWhere(['not', ['volt1' => null]]);

    ;
    return $dataProvider;
}

и в контроллере управлять функцией поиска, которая вам действительно нужна

$searchModel = new MdcmetersdataSearch();
switch($type){
    case '402':
    $dataProvider = $searchModel->search402(Yii::$app->request->queryParams);
    break;
    ....
}
...