Есть фильтры с товарами:
на изображения выбрано два фильтра из одной группы, вывело один товар который привязан к этим двум фильтрам. А всего у этих фильтров два товара, один привязан только к фильтру XL , а другой товар привязан к двум фильтрам к XL и XXL. Должно вывестись два товара.
Но это неправильно совпадения должны работать при выборе разных групп фильтров, т.е. если мы выбрали в группе Цвет -> Красный и выбрали Размер -> XL и XXL то должны вывестись товары у которых цвет "красный" и размер "XL" ИЛИ "XXL", а у меня все совпадения связанные. Т.е. в каждой группе фильтров связей не должно быть, а только связи между группами фильтров.
Вот код:
Код: Выделить всё
$productsQuery = Product::find();
if ($id !== null) {
$productsQuery->where([Product::tableName() .'.category_id' => $id]);
}
if (count($filter_ids) > 0) {
$productsQuery->select([Product::tableName() . '.*', 'Count(*) as total']);
$productsQuery->joinWith(['filter']);
$productsQuery->andWhere([ProductFilter::tableName() . '.filter_id' => $filter_ids]);
$productsQuery->groupBy(ProductFilter::tableName() . '.product_id');
$productsQuery->having('total = ' . count($filter_ids));
}
Вот скрин таблицы фильтров
Вот скрин таблицы связей фильтров с товарами: