4

我在循环中获取 addAttributeToFilter 函数以在 Magento 中运行时遇到问题。我的商店中有测试数据,以支持搜索以下所有数据;

$attributeSelections=array( array('size' => 44, 'color' => 67, 'manufacturer' => 17),
                        array('size' => 43, 'color' => 69, 'manufacturer' => 17),
                        array('size' => 42, 'color' => 70, 'manufacturer' => 17));

还有我的代码来搜索这些组合;

foreach ($attributeSelections as $selection) {
    $searcher = Mage::getSingleton('catalogsearch/advanced')->getProductCollection();
    foreach ($selection as $k => $v) {
        $searcher->addAttributeToFilter("$k", array('eq' => "$v"));
        echo "$k: $v<br />";
    }
    $result=$searcher->getData();
    print_r($result);
}

这个循环给出了以下结果(为了观看乐趣而略微消毒);

size: 44
color: 67
manufacturer: 17
Array ( [0] => Array ( [entity_id] => 2965 [entity_type_id] => 4 [attribute_set_id] => 28 [type_id] => simple [sku] => 1006-0001 [size] => 44 [color] => 67 [manufacturer] => 17 ) ) 

size: 43
color: 69
manufacturer: 17
Array ( [0] => Array ( [entity_id] => 2965 [entity_type_id] => 4 [attribute_set_id] => 28 [type_id] => simple [sku] => 1006-0001 [size] => 44 [color] => 67 [manufacturer] => 17 ) ) 

size: 42
color: 70
manufacturer: 17
Array ( [0] => Array ( [entity_id] => 2965 [entity_type_id] => 4 [attribute_set_id] => 28 [type_id] => simple [sku] => 1006-0001 [size] => 44 [color] => 67 [manufacturer] => 17 ) ) 

所以我的循环是函数并生成搜索。但是,在循环的第一次迭代中输入 addAttributeToFilter 的值似乎仍然为每次搜索而存储。我尝试清除我的搜索对象,例如 unset($searcher) 和 unset($result)。我也尝试过诸如 getNewEmptyItem()、resetData()、 distinct() 和 clear() 之类的 magento 函数,但都没有达到预期的效果。

基本上我要做的是在我的脚本尝试以编程方式创建具有这些属性组合的产品之前检查重复的产品。属性选择的数组可能具有不同的大小,因此需要循环。

如果有人能够阐明我的问题,我将不胜感激。

4

3 回答 3

11

@matei removeAttributeToSelect 不幸的是实际上并没有工作。我今天发现重置集合的正确方法是:

$searcher->clear()
         ->getSelect()->reset('where');

这将删除加载的,并删除集合选择中的_items任何子句。where然后,您可以添加新鲜的标准和load集合。

于 2011-10-11T09:43:24.220 回答
1

The whole point of the singleton is to get the same object every time so unsetting $searcher doesn't work. You can use

$searcher->removeAttributeToSelect($k) 
to remove each attribute filter.

于 2010-04-23T17:44:55.267 回答
0

正如 matei 已经指出的那样,这里的问题在于 getSingleton 检索相同的对象。我将此声明行替换为;

$searcher = Mage::getModel('catalogsearch/advanced')->getProductCollection();

它现在可以按需要工作。

于 2010-04-23T18:11:36.223 回答