如何在Magento搜索中重置addAttributeToFilter

Bob*_*bby 4 php loops magento advanced-search

我在循环中获取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));
Run Code Online (Sandbox Code Playgroud)

我的代码可以搜索这些组合;

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);
}
Run Code Online (Sandbox Code Playgroud)

这个循环给出了以下结果(稍微消毒了veiwing乐趣);

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 ) ) 
Run Code Online (Sandbox Code Playgroud)

所以我的循环是功能并生成搜索.但是,在循环的第一次迭代中输入addAttributeToFilter的值似乎仍然存储在每次搜索中.我已经尝试清除我的搜索对象,例如,unset($ searcher)和unset($ result).我也尝试了magento函数,如getNewEmptyItem(),resetData(),distinct()和clear(),但没有一个具有所需的效果.

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

如果有人能够对我的问题有所了解,我会非常乐观.

Jon*_*Day 9

@matei不幸的是,removeAttributeToSelect实际上并不起作用.我今天发现重置集合的正确方法是:

$searcher->clear()
         ->getSelect()->reset('where');
Run Code Online (Sandbox Code Playgroud)

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