Magento 1.7将多个属性添加到集合过滤器

时间:2013-11-04 07:16:23

标签: magento collections

在我收集产品集合的函数中,我将使用未知数量的属性进行过滤,因此我无法对其进行硬编码。我的函数如下:

public function getAssociatedProducts()
    {

        $parameters = $this->getRequest()->getPost();               
        $product = Mage::getModel('catalog/product')->load($parameters['parent_id']);
        $grouped = Mage::getModel('catalog/product_type_grouped');


        $collection = $grouped->getAssociatedProductCollection($product)
            ->addAttributeToSelect('*')
            ->addFilterByRequiredOptions()
            ->setPositionOrder()
            ->addStoreFilter($grouped->getStoreFilter($product))
            ->addAttributeToFilter('status', array('in' => $grouped->getStatusFilters($product)));          
            // I need to do another addAttributeToFilter on this collection for the $parameters variable above. But the number of paramters I will need to check is unknown.


        return $collection;

    }

addAttributeToFilter可以处理一组属性吗? $ parameters变量带来的属性数量是未知的,我只能弄清楚如何一次执行这些属性,但我需要它足够灵活,可以处理最多10个属性到过滤器。

谢谢!

我应该补充说,参数数组可能如下所示:

galco_weapon_list => 3602,
product_color => 1595,
weapon_draw_hand => 2700

上面的数组总是不同的。

1 个答案:

答案 0 :(得分:3)

如果您将array作为第一个参数传递给addAttributeToFilter(),Magento将假设您要构建OR构造。所以不,你不能一次传递不同的属性。

如果您传递string(或Mage_Eav_Model_Entity_Attribute_Abstract的实例),Magento会假设您希望传递的属性为AND

查看你的帖子,我认为你的目标是AND一些过滤器,你不知道哪些属性会来,但它们都需要等于它们给定的值。

假设$parameters中的键与属性名称匹配,您可以通过在返回之前插入循环并通过$parameters数组循环来实现此目的。

按照每个属性照常进行清理/验证,然后每次迭代添加addAttributeToFilter()次调用,例如像这样的东西:

:

foreach ($parameters as $k => $v) {

    // ... sanitizing/validation code here ...

    $collection->addAttributeToFilter($k, $v);

}

return $collection;