2

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

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

上面的数组总是不同的。

4

1 回答 1

4

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

如果您传递 a string(或 instanceof 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;
于 2013-11-04T10:02:30.823 回答