Magento集合 - 按几个字段过滤

时间:2012-02-22 21:12:46

标签: php zend-framework magento php-5.3

使用Magentos集合模型,我该如何添加查询部分/过滤器,如下所示:

WHERE (main_table.x < 1 OR (main_table.x - main_table.y) >= 5)

更新 我现在正在运行这个:

$this->getSelect()
    ->where('main_table.x < 1')
    ->orWhere('(main_table.x - main_table.y) >= :qty');
$this->addBindParam(':qty', $qty);

结果:

SELECT ... WHERE ... AND ... AND (main_table.x < 1) OR ((main_table.x - main_table.y) >= :qty) ORDER BY ...

问题是我似乎无法将$qty绑定到:qty

更新2 我最终得到了这个,因为我需要括号内的OR

$this->getSelect()->where('(main_table.x < 1 OR (main_table.x - main_table.y) >= ?)', $qty);

2 个答案:

答案 0 :(得分:6)

当您使用getSelect方法时,您将绕过Magento的模型集合界面。有时这是获得所需精确选择查询的唯一方法,但请记住,它可能不会与Magento模型界面正在进行100%凝胶化。

当您使用bindParamater方法时,您正在使用Magento模型界面。我不能说为什么它不起作用,但我怀疑Zend选择对象和Magento模型集合对象在不同的​​时间以不同的方式绑定它们的参数。

要获得所需的结果,请跳过bindParamater方法,并使用更简单的?参数替换orWhere方法。

$this->getSelect()
    ->where('main_table.x < 1')
    ->orWhere('(main_table.x - main_table.y) >= ?',$qty);

答案 1 :(得分:3)

  

Blockquote问题是我似乎无法将$ qty绑定到:qty

实际上这不是一个问题,就像PDO / MySQL引擎使用查询语句准备和绑定参数(单独提交)以及之后的查询执行一样。

因此,如果您使用绑定参数

,则不会在数据库抽象层上生成最终查询语句

请参阅此stackoverflow questionPDO manual