Magento:addAttributeToFilter列出空多选属性

时间:2012-07-14 11:46:24

标签: magento

对于“多选”属性,如何过滤产品集合以查找属性未选择任何内容的产品?我尝试了以下方法,但没有一个有效:

$productCollection->addAttributeToFilter( 'multi_select_attribute', array( 'null' => true ) );
$productCollection->addAttributeToFilter( 'multi_select_attribute', array( 'null' => '' ) );
$productCollection->addAttributeToFilter( 'multi_select_attribute', array( 'eq' => '' ) ); 
$productCollection->addAttributeToFilter( 'multi_select_attribute', array( 'finset' => '') );

全部返回空集合。

那么,如何过滤产品集合以查找“multi_select_attribute”未选择任何内容的产品?

编辑 - 附加信息:

这就是我正在做的事情:

$productCollection = Mage::getResourceModel('catalog/product_collection');
$this->_addProductAttributesAndPrices($productCollection);
$productCollection->addStoreFilter();
$productCollection->addAttributeToFilter( ... one of the above ... );

1 个答案:

答案 0 :(得分:0)

如果您查看catalog_product_entity_varchar,您会看到只有实际为产品的multiselect属性填充的值才会填充。

这意味着如果没有为产品选择任何值,则不会在DB中为该产品/ multiselect属性写入任何内容,这意味着您至少要进行某种连接或某些内容来检索没有值的产品。

快速而肮脏的方法是首先获取具有此multiselect属性值的产品,然后从原始集合中取回它们:

$attribute_code = 'multi_select_attribute';

// Get a product collection and add whatever filters you have to
$collectionWithMultiSelectValue = Mage::getModel('catalog/product')->getCollection();
$collectionWithMultiSelectValue->addAttributeToSelect($attribute_code)
->addFieldToFilter(array( array('attribute'=> $attribute_code, 'notnull' => true)));

// Take products with a value for the attribute off the collection
$productCollection->addAttributeToSelect('*')
->addAttributeToFilter('entity_id', array('nin' => $collectionWithMultiSelectValue->getAllIds()));