如何获得2个或更多类别中的产品

时间:2012-08-24 10:55:18

标签: magento collections filter categories

我已经尝试了几天来获得关于如何按2个或更多类别过滤产品集合的清洁解决方案。产品应该属于A类和B类,而不属于任何类别。 我尝试过在互联网上找到的多种解决方案但没有成功。到目前为止我找到的唯一解决方法(但我找不到它)是使用原始查询然后从ID中获取集合:

SELECT e.entity_id FROM catalog_product_entity AS e INNER JOIN catalog_category_product AS ccp on ccp.product_id=e.entity_id where ccp.category_id =100 or ccp.category_id = 101 group by entity_id having count(*) > 1

这将返回在类别100和101中找到的产品列表。 但是,我希望实际上有一个“Magento方式”或者这样做而不需要执行原始查询。有人知道这个吗?

由于

2 个答案:

答案 0 :(得分:4)

经过漫长的一夜工作后,我终于找到了合适的解决方案:

$cat_ids = array(4,5,6);
$collection = Mage::getModel('catalog/product')->getCollection();
$collection->joinField('category_id', 'catalog/category_product', 'category_id', 'product_id = entity_id', null, 'left')
    ->addAttributeToFilter('category_id', array('in' => array('finset' => $cat_ids)))
    ->getSelect()
    ->group('entity_id')
    ->having('count(*) = ' . count($cat_ids));

你去吧。以上内容将返回同时属于所有类别的所有产品。感谢activeDev和Jurgen的帮助。

答案 1 :(得分:0)

这应该可以正常工作。

$collection = Mage::getModel('catalog/product')
            ->getCollection()
            ->joinField('category_id', 'catalog/category_product', 'category_id', 'product_id = entity_id', null, 'left')
            ->addAttributeToFilter('category_id', array('in' => array('finset' => '36,37')))
            ->addAttributeToSelect('*')
            ->setPageSize(5);

这来自http://blog.chapagain.com.np/magento-how-to-filter-product-collection-using-2-or-more-category-filters/,但似乎有些过时了。

我无法确认这是否适用于我当前不包含任何类别的版本。但是我按照预期得到了一个空集合,所以让我知道!