Magento:addAttributeToFilter但忽略没有此属性的产品?

Rak*_*ard 4 attributes exists filter magento not-exists

我试图在我的商店添加一些过滤器,但它们有一个讨厌的副作用.

假设我有产品类型A和B.现在我想只显示A颜色=蓝色/红色.

$collection = Mage::getResourceModel('catalog/product_collection')
    ->setStoreId($this->getStoreId())
    ->addCategoryFilter($this)
    ->addAttributeToFilter(array(
          array('attribute' => 'color', 'in' => array(4, 6)),
    )
    );
Run Code Online (Sandbox Code Playgroud)

这样就可以了,但是现在因为产品类型B没有赋值给颜色(因为没有指定这个属性),所以没有这种类型的产品出现.

我在论坛http://www.magentocommerce.com/boards/viewthread/178309上找到了这段代码,但它不起作用:

array('attribute' => 'color', 'is' => new Zend_Db_Expr('null'))
Run Code Online (Sandbox Code Playgroud)

也不是:

array('attribute' => 'color', 'null' => true),
Run Code Online (Sandbox Code Playgroud)

这实际上显示了已分配属性但没有声明值的产品......

我也尝试过添加:

array('attribute' => 'price', 'gteq' => 0), 
Run Code Online (Sandbox Code Playgroud)

因为我认为这些陈述与'OR'相关(根据文档),但即便只添加了具有属性的产品类型......

请注意,这些值来自下拉列表,但不确定这是否重要.

Ant*_*pov 7

也许为时已晚,但这对我有用:

$collection = Mage::getResourceModel('catalog/product_collection')
    ->setStoreId($this->getStoreId())
    ->addCategoryFilter($this)
    ->addAttributeToFilter(
        array(
            array('attribute' => 'color', 'null' => true),
            array('attribute' => 'color', 'in' => array(4, 6)),
        ),
        '',
        'left'
);
Run Code Online (Sandbox Code Playgroud)