在我收集产品集合的函数中,我将使用未知数量的属性进行过滤,因此我无法对其进行硬编码。我的函数如下:
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
上面的数组总是不同的。
答案 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;