Как сделать Relation Count с жадной загрузкой?

В первом yii все делалось достаточно просто, а вот во втором затык, который приводит к 250 запросам на обычной странице. и хотелось бы все сделать без костылей.

есть relation:
public function getPostStatisticsCount()
    {
        return $this->hasMany(PostStatistics::className(), ['post_id' => 'id'])->count();
    }


Есть вызов функции с жадной загрузкой
$mm =  Post::find()->with('postStatisticsCount')... ->all();


Но жадная загрузка не срабатывает.
Подобное поведение описывается и тут - https://github.com/yiisoft/yii2/issues/2179 .

На форуме yii мне посоветовали запихнуть в конструктор класса реляцию.

Хотелось бы пример решения с конструктором.
  • Вопрос задан
  • 550 просмотров
Пригласить эксперта
Ответы на вопрос 1
bitver
@bitver
$customers = Customer::find()
    ->select([
        '{{customer}}.*', // select all customer fields
        'COUNT({{order}}.id) AS ordersCount' // calculate orders count
    ])
    ->joinWith('orders') // ensure table junction
    ->groupBy('{{customer}}.id') // group the result to ensure aggregation function works
    ->all();
Из исходников вытянул...
Что-то вроде такого у меня в приложении работает, хотя если есть возможность, то лучше идти от обратного и искать через модельPostStatistics и группировать по Post
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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