使用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);
答案 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引擎使用查询语句准备和绑定参数(单独提交)以及之后的查询执行一样。
因此,如果您使用绑定参数
,则不会在数据库抽象层上生成最终查询语句