Как правильно сделать выборку many_many в Yii2?

Есть таблицы
products [id, name,publish, ....]
category [id, name, parent_id...]
products_to_category [product_id, category_id]
При расчете количества товаров у главной категории выводятся дубли, допустим если один товар в подкатегориях BMW, AUDI, OPEL, (главная категории у всех автозапчасти) то будет считаться 3 товара у категории Автозапчасти

выборка делается так:

Отрывок из ProductsSearch.php метод search
$query = Products::find();
....
$query->joinWith('categories');
$query->andFilterWhere(['category.parent_id' => $this->mainCategoryID]);

relation в Products.php
public function getCategories() {
        return $this->hasMany(Category::className(), ['id' => 'category_id'])
            ->viaTable('products_to_category', ['product_id' => 'id']);
}


relation в Category.php
public function getParent()
{
        return $this->hasOne(Category::className(), ['id' => 'parent_id']);
}


вот вывод запроса
SELECT COUNT(*) FROM `products` LEFT JOIN `products_to_category` ON `products`.`id` = `products_to_category`.`product_id` LEFT JOIN `category` ON `products_to_category`.`category_id` = `category`.`id` WHERE (`category`.`parent_id`=1) AND (`publish`=1)


p.s в ListView выводится один товар, то есть без дублей, но в summary пишет, что найдено 3 товара

p.p.s Есть ли способ обойти group by в таких случаях? так как при больших объемах базы с ним будет долго выполняться запросы от 30-40 секунд до 200 при нагрузках
  • Вопрос задан
  • 61 просмотр
Пригласить эксперта
Ответы на вопрос 1
webinar
@webinar
Учим yii2: https://youtu.be/-WRMlGHLgRg
Это проблема логики. Надо переписывать метод, который считает. Вы не одиноки, штатный метод не корректно работает с такими выборками.
Ответ написан
Ваш ответ на вопрос

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

Войти через TM ID
Похожие вопросы
от 90 000 до 150 000 руб.
Fmedia Санкт-Петербург
от 40 000 до 100 000 руб.
Max.Credit Санкт-Петербург
от 150 000 до 150 000 руб.