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'相关(根据文档),但即便只添加了具有属性的产品类型......
请注意,这些值来自下拉列表,但不确定这是否重要.
也许为时已晚,但这对我有用:
$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)