Yii2 как вытащить вложенные свзи и получить их count?

Делаю статистику для пользователя.
По дням, неделям, мес. год. все время и диапазон дат.

Есть три сущности, на которых все это завязано все они клеются один ко многим
Partner->Coupon->Order
В таблице купона есть partner_id
В таблице заказа есть partner_id, сoupon_id
Везде стоят даты создания в UNIX от поведения TimeStampBehavior

на контроллере под каждый период создан экшн. На фронте это просто кнопки.

За весь период я сделал следующим образом. получил id текущего партнера и вытащил все купоны принадлежащие ему. запихнул это в дата провайдер, а на фронтенде. сделал доп запрос по каунтам.
провайдер
<table class="table table-hover">
            <tr>
                <td><strong>Название купона</strong></td>
                <td><strong>Покупок</strong></td>
            </tr>
            <?= \yii\widgets\ListView::widget([
                'dataProvider' => $couponsProvider,
                'itemView' => '_coupons',
            ]) ?>
        </table>

непосредственно счетчик.
<?php
use yii\helpers\Html;
use yii\helpers\Markdown;

//получаем кол-во
$orders = \common\models\Order::find()->where(['coupon_id' => $model->id])->count(); ?>

<tr>
    <td><?= Html::encode($model->title) ?></td>
    <td><?= Html::encode($orders) ?></td>
</tr>


Собственно по датам я в метод count закладываю условия по дате. А до этого дату конвертирую подобным образом
$timestamp = time();
		$dates = Yii::app()->dateFormatter->format('dd-MM-yyyy', $timestamp);
		$date = new DateTime($dates);
		$date->modify('-1 day');
		$date_elements  = explode("-",$date->format('d-m-Y'));
		$beforeTime = mktime(0,0,0,$date_elements[1],$date_elements[0],$date_elements[2]);


И это получается, что +1 запрос на каждый купон. Купоны имеют статусы и в статистике архивные не учавствуют. По сути больше 10 товарных купонов не будет. Но все равно, написано костылями и я не знаю как это улучшить через провайдер или как вообще статистику будет правильнее реализовать? Учитывая сейчас то, что связи есть, но как-то использовать их я не могу поскольку получаем партнера, потом кучу его купонов, а потом все заказы по этим купонам.
  • Вопрос задан
  • 229 просмотров
Пригласить эксперта
Ответы на вопрос 1
@soulness
на сколько помню, в yii был специальный тип связи, который назывался статическим запросом. эта специальная свзять как раз и предназначалась для запросов агрегирования. во втором yii думаю такое тоже должно быть
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы