Нетиповая колонка в виджете GridView
Добавлено: 2017.04.12, 21:06
Добрый вечер.
Имеется стандартный виджет GridView, с колонкой "direction_id".
Где "getList()" — метод, делающий выборку всех записей, сортирующий их и возвращающий в виде массива, а "$model->direction" — это relation в модели "Direction". Вроде всё хорошо, виджет работает, данные отображаются, только для каждой строки в GridView производится дополнительный запрос к БД. Соответственно, если в таблице будет 100 строк, то для них осуществится 100 дополнительных запросов, что не очень хорошо.
Сначала я поменял "$model->direction" на:
и задумался, чтобы записать массив, который возвращает "getList()" в переменную выше начала виджета, чтобы не выполнять запрос много раз. А потом указать эту переменную в "filter" и в "value" следующим образом:
но на это я получил ошибку "неопределённая переменная $directions" в пункте "value".
Собственно возник вопрос, как это правильно реализовать?
В Yii 1 я бы создал публичное свойство в контроллере, в нужном методе записал туда массив записей и вызвал бы его через $this->property. В Yii 2 тоже есть такая возможность: \Yii::$app->controller->property, но почитав форум, я увидел, что такой вариант не рекомендуют. Поэтому прошу помощи у знающих людей, как решить мою проблему. Была ещё идея создать компонент, но я подумал, что это как-то слишком мудрёно.
Теги: yii2, gridview, columns, format, raw, arrayhelper.
Имеется стандартный виджет GridView, с колонкой "direction_id".
Код: Выделить всё
<?= GridView::widget([
'dataProvider' => $dataProvider,
'filterModel' => $searchModel,
'columns' => [
...
[
'attribute' => 'direction_id',
'filter' => Direction::getList(),
'format' => 'raw',
'value' => function ($model, $key, $index, $column) {
return $model->direction->title;
},
],
...
],
]);?>
Сначала я поменял "$model->direction" на:
Код: Выделить всё
return ArrayHelper::getValue(Direction::getList(), $model->direction_id);
Код: Выделить всё
'filter' => $directions,
'value' => function ($model, $key, $index, $column) {
return ArrayHelper::getValue($directions, $model->direction_id);
},
Собственно возник вопрос, как это правильно реализовать?
В Yii 1 я бы создал публичное свойство в контроллере, в нужном методе записал туда массив записей и вызвал бы его через $this->property. В Yii 2 тоже есть такая возможность: \Yii::$app->controller->property, но почитав форум, я увидел, что такой вариант не рекомендуют. Поэтому прошу помощи у знающих людей, как решить мою проблему. Была ещё идея создать компонент, но я подумал, что это как-то слишком мудрёно.
Теги: yii2, gridview, columns, format, raw, arrayhelper.