如何在 Magento 搜索中重置 addAttributeToFilter
Posted
技术标签:
【中文标题】如何在 Magento 搜索中重置 addAttributeToFilter【英文标题】:How can I reset addAttributeToFilter in Magento searches 【发布时间】:2011-02-11 15:18:59 【问题描述】:我在获取循环中的 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 函数,但都没有达到预期的效果。
基本上,我要做的是在我的脚本尝试以编程方式创建具有这些属性组合的产品之前检查重复的产品。属性选择的数组可能有不同的大小,因此需要一个循环。
如果有人能够阐明我的问题,我将非常感激。
【问题讨论】:
【参考方案1】:@matei 不幸的是,removeAttributeToSelect 实际上不起作用。我今天发现重置集合的正确方法是:
$searcher->clear()
->getSelect()->reset('where');
这将删除加载的_items
,并删除集合选择中的所有where
子句。然后,您可以添加新的标准和load
集合。
【讨论】:
【参考方案2】:正如 matei 已经指出的那样,这里的问题在于 getSingleton 检索相同的对象。我将此声明行替换为;
$searcher = Mage::getModel('catalogsearch/advanced')->getProductCollection();
现在可以正常工作了。
【讨论】:
如果他的回答解决了您的问题,请点击他帖子旁边的复选标记以接受他的回答。【参考方案3】:单例的重点是每次都获取相同的对象,因此取消设置 $searcher 不起作用。你可以使用
$searcher->removeAttributeToSelect($k) 删除每个属性过滤器。【讨论】:
谢谢,我刚刚意识到问题出在 getSingleton 中。我尚未测试您的解决方案,但我已将初始声明更改为 getModel 并且一切正常。以上是关于如何在 Magento 搜索中重置 addAttributeToFilter的主要内容,如果未能解决你的问题,请参考以下文章