FitTech
@FitTech

Как правильно получать данные в GridView?

Подскажите, пожалуйста, как это правильно реализовать и что читать для того чтобы не задавать в дальнейшем такие вопросы?

Например, есть у меня страница с GridView таблицей, хочу добавить фильтр с выпадающим списком. Как я это реализовал:

<?= GridView::widget([
    'dataProvider' => $dataProvider,
    'filterModel' => $searchModel,
    'tableOptions' => [
        'class' => 'table table-list table-scientist'
    ],
    'columns' => [
        ['class' => 'yii\grid\SerialColumn', 'header' => '№'],
        [
            'attribute' => 'name'
        ],
        'itemScientist.birth_date:date',
        [
            'attribute' => 'rank',
            'value' => function($model) {
               $model->rank->name
            },
            'filter' => Select2::widget([
                'model' => $searchModel,
                'multiple' => true,
                'attribute' => 'rank',
<b>                'data' => ArrayHelper::map(Catalog::find()->where(['type' => Catalog::TYPE_RANK])->asArray()->all(), 'id', 'name'),</b>
                'options' => [
                    'placeholder' => ' '
                ]
            ]),
        ],
    ],
]); ?>


Вопрос особенно интересен в пункте где получаю data. Знаю правило, что запросы в бд из view делать "ужасно, плохо и тд" и я с этим согласен. Но как тогда делать правильно?
  • Вопрос задан
  • 75 просмотров
Решения вопроса 2
webinar
@webinar Куратор тега Yii
Учим yii: https://youtu.be/-WRMlGHLgRg
реализовать в Catalog метод, который выдает нужный массив, дернуть его в контролере, положить в переменную, передать во view, передать в gridView
Ответ написан
@hollanditkzn
Вот хороший пример наглядно и понятно
www.elisdn.ru/blog/76/seo-service-on-yii2-admin-and-sef
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
22 февр. 2020, в 03:24
10000 руб./за проект
21 февр. 2020, в 21:48
12000 руб./за проект
21 февр. 2020, в 21:45
12000 руб./за проект