Есть грид и его колонки:
Код: Выделить всё
$gridColumns = [
['class' => SerialColumn::class],
[
'attribute' => 'cap',
'label' => 'Всего, Зан., Св.',
'format' => 'raw',
'value' => function($model) {
$data = Yii::$app->db->createCommand("SELECT * FROM dbFunction({$model->point_id}")->queryOne();
$html = <<< HTML
<div class="item">{$data['capacity']}</div>
<div class="item">{$data['occupied']}</div>
<div class="item">{$data['free']}</div>
HTML;
return $html;
},
],
];
echo GridView::widget([
'id' => 'my-table',
'columns' => $gridColumns,
'dataProvider' => $dataProvider,
'filterModel' => $searchModel,
'rowOptions' => function($model) {
$data = Yii::$app->db->createCommand("SELECT * FROM dbFunction({$model->point_id}")->queryOne();
$class = $data['free'] === 0 ? 'free-point' : '';
if ($data['capacity'] === 0 && $data['occupied'] === 0 && $data['free'] === 0)
$class = 'd-none';
return [
'data-id' => $model->id,
'class' => $class,
];
},
]);
Вопрос: можно ли где-то её вызвать единожды (для итерации) и использовать результат в обоих местах? Не имею понятия как сделать, потому что для columns внутри движка идёт свой цикл, и для rowOptions видимо тоже что-то отдельное. А как это скомпановать?
P.S. На js я могу перенести условия для rowOptions, но тогда получится что написано "отображается 30 записей из 60", а на деле будет отображено 5. Поэтому хотелось бы решить это так же на бэке.