Как группирировать вывод записей при использовании ActiveDataProvider в Yii2?
Добавлено: 2022.05.19, 18:17
Нужно выводить товар в таком формате:
То есть, мы выводим товар в блоке группы, с которой он связан.
Имея дело с обычным массивом - это не было бы проблемой:
Но нам нужна возможность фильтрации/сортировки, поэтому нужен ActiveDataProvider, данные которого оформляются с помощью ListView/GridView.
Из идей только костыли:
Но он имеет кучу побочных эффектов, как минимум - лишние COUNT SQL-запросы. Как добиться нужного эффекта без костылей?
То есть, мы выводим товар в блоке группы, с которой он связан.
Имея дело с обычным массивом - это не было бы проблемой:
Код: Выделить всё
<?php foreach ($groups as $group): ?>
<div>
<h1><?php echo $group['name'] ?></h1>
<div>
<table>
<?php foreach ($group['products'] as $product): ?>
<tr>
<td><?php echo $product['name'] ?></td>
<td><?php echo $product['price'] ?></td>
</tr>
<?php endforeach; ?>
</table>
</div>
</div>
<?php endforeach; ?>
Из идей только костыли:
Код: Выделить всё
<?php foreach ($groups as $group): ?>
<h1><?php echo $group['name'] ?></h1>
<?php
echo \yii\widgets\ListView::widget([
'dataProvider' => new ActiveDataProvider([
'query' => $group->products,
]),
'layout' => "{items}",
'itemView' => '@frontend/views/_parts/_order-search-item',
])
?>
<?php endforeach; ?>