Magento产品集合在功能中使用后未过滤

Ada*_*oss 0 php collections product magento

好的,我运行了一个非常简单的模块,但是遇到了我无法解决的产品集合问题。这是问题所在:

1)我根据发布的搜索类别加载产品集合:

$products = Mage::getModel('catalog/product')
            ->getCollection()
            ->addStoreFilter(Mage::app()->getStore()->getId())
            ->addAttributeToSelect('*')
            ->addAttributeToFilter('search_category', array('eq' => $data['search_category'])); 
Run Code Online (Sandbox Code Playgroud)

2)我在基本函数中使用此集合来检索属性:

$section = $this->getSections($products);
Run Code Online (Sandbox Code Playgroud)

3)接下来,在代码中,如果发布了另一个值,我将进一步过滤产品集合,这将运行另一个功能。

if($data['section'] != "")
{
    $products->addAttributeToFilter('section', array('eq' => $data['section']));            
    $profile = $this->getProfiles($products);
    echo count($products);
    echo count($products->getIds());
}
Run Code Online (Sandbox Code Playgroud)

基本上,进入第二功能的产品是未经过滤的。如果在此阶段回显$ products对象的计数,它将为我提供产品集合中的原始金额,而不是过滤后的金额。

如果我回显$ products-> getIds(),它将为我提供正确的过滤计数。

我真的不明白为什么这行不通,我已经详细检查了代码,而且都是正确的。看来,如果我在函数中使用产品集合,就无法进一步过滤它。

如果将过滤器移到第一个函数上方,它将起作用,但显然可以给我所需的结果。

如果有人可以解释请帮忙!

Sla*_*den 5

您应该检查您的$products集合是否已加载到初始化与尝试向其添加其他过滤器的位置之间的某个位置。

因为在加载集合之后,您对其应用的过滤器将不会对其产生影响,因为它们仅影响从数据库获取集合的最终请求,并且您的已被加载。

Mage_Catalog_Model_Resource_Product_Collection::getAllIds()(我相信你没有拼错getAllIds()$products->getIds())将返回正确的过滤量,但因为它会与集合内的选择对象进行操作,并以DB的请求,而不是领装物品的ID。

请记住,类似的基本功能count和类似的语言构造foreach()将触发加载过程以进行收集。