Magento - 过滤产品系列由BOTH多个类别组成

时间:2014-07-02 10:54:32

标签: magento collections filter categories

在我的magento商店中,我需要按2个类别过滤我的产品系列。

我在线搜索并找到了执行此操作的方法(请参阅下面的现有代码),但他们使用OR条件过滤多个类别 - 有没有办法在AND条件下执行此操作,以便产品必须在两种类别中找到,而不仅仅是它们中的任何一种?

我目前正在使用以下代码:

$_productCollection = Mage::getModel('catalog/product')
    ->getCollection()
    ->joinField('category_id', 'catalog/category_product', 'category_id', 'product_id = entity_id', null, 'left')
    ->addAttributeToSelect('*')
    ->addAttributeToFilter('category_id', array(
        array('finset' => '26'),
        array('finset' => '63'))
    )
    ->addAttributeToSort('created_at', 'desc');

    foreach($_productCollection as $_product){
        echo $_product->getName()."<br/>";
    };

我的产品/类别设置为:

产品:

category 1 (ID 26)
category 2 (ID 63)

product A - found in category 1
product B - found in category 1 & 2
product C - found in category 1 & 2

所以我下面的当前代码将输出所有3个产品,我希望它只显示产品B和C

2 个答案:

答案 0 :(得分:1)

仅按1类别结束过滤,然后在每个输出上检查第2类别中是否存在产品ID。不理想,但现在做的工作

$_filter = 26;

foreach($_productCollection as $_product){
    $cats = $_product->getCategoryIds();
    if (in_array($_filter, $cats)):
        ....
    endif; 
}

答案 1 :(得分:1)

您是否尝试过按顺序应用过滤器?

所以替换这个:

->addAttributeToFilter('category_id', array(
    array('finset' => '26'),
    array('finset' => '63'))
)

有了这个:

->addAttributeToFilter('category_id', array(array('finset' => '26')))
->addAttributeToFilter('category_id', array(array('finset' => '63')))

这通常是Magento喜欢将AND过滤器应用于集合的方式。