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確認すると、商品の複数選択属性に実際に入力された値のみが入力されていることがわかります。

つまり、製品に値が選択されていない場合、その製品/複数選択属性の DB には何も書き込まれません。つまり、値のない製品を取得するには、少なくとも何らかの結合または何かを行う必要があります。

これを行う簡単で汚い方法は、最初にこの複数選択属性の値を持つ製品を取得し、次に元のコレクションからそれらを取り戻すことです:

$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 に答える