Нужно
выводить товар в таком формате:
То есть, мы выводим товар в блоке группы, с которой он связан.
Имея
дело с обычным массивом - это не было бы проблемой:
<?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; ?>
Но нам нужна возможность
фильтрации/сортировки, поэтому
нужен ActiveDataProvider, данные которого оформляются с помощью
ListView/GridView.
Из идей только костыли:
<?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; ?>
Но он имеет кучу
побочных эффектов, как минимум - лишние COUNT SQL-запросы. Как добиться нужного эффекта без костылей?