0

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

$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 ... );
4

1 回答 1

0

如果您看一下,catalog_product_entity_varchar您会发现只有实际为产品的多选属性填充的值才被填充在那里。

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

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

$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()));
于 2012-07-15T13:04:38.683 回答