Magento集合 - 使用addAttributeToFilter嵌套where子句

时间:2013-01-02 12:34:02

标签: php mysql zend-framework magento where-clause

我正在尝试为magento集合添加多个过滤器,我可以在基本级别上执行此操作。 我真正想做的是能够通过许多嵌套过滤器过滤集合,这些过滤器可以是任何级别的深度。例如,我知道我可以使用以下代码添加多个过滤器:

$collection->addAttributeToFilter('example_attribute', array('eq' => 1));

我希望能够做的是拥有可以互相嵌套的过滤器(AND& OR)。我不确定Magento系列是否允许你这样做,但我无法在网上找到任何例子。

进一步详细说明和示例: 我需要过滤一个集合,其中等效的SQL(忽略我需要的选定字段和JOINS)将是:

SELECT .........

WHERE 

(attribute1 = 1
OR 
atttribute2 = 'yes')

AND
qty > 5

AND(
  (attribute3 != 'no'
  AND 
  attribute4 = 50 )
  OR
  (attribute3 != 'no'
  AND 
  attribute6 > 50 )
  )

这只是一个快速粗略的例子,但基本问题是如何嵌套任意数量的过滤器。

1 个答案:

答案 0 :(得分:0)

您可以使用以下代码进行OR调节:

$collection->addAttributeToFilter(array(
array('attribute'=> 'someattribute','like' => 'value'),
array('attribute'=> 'otherattribute','like' => 'value'),
array('attribute'=> 'anotherattribute','like' => 'value'),
));

编辑: 使用此功能,您应该能够在查询中至少执行AND和OR调节。似乎标准行为不允许嵌套AND OR条件。所以我假设您需要为此编写自定义查询。 有关进一步参考,请检查文件Mage_Eav_Model_Entity_Collection_Abstract,其中定义了方法addAttributeToFilter。