对于“多选”属性,如何过滤产品集合以查找属性未选择任何内容的产品?我尝试了以下方法,但没有一个有效:
$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 ... );
答案 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()));