使用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);
当您使用getSelect
方法时,您通过传递Magento的模型集合接口。有时,这是获得您想要的确切选择查询的唯一方法,但请记住,它可能无法100%与Magento模型界面的功能相结合。
当您使用bindParamater
方法时,您使用的是Magento模型界面。我无法解释为什么不起作用,但我怀疑Zend选择对象和Magento模型集合对象在不同的时间以不同的方式绑定它们的参数。
要获得所需的结果,请跳过bindParamater
方法,使用更简单的?
参数替换orWhere
方法。
$this->getSelect()
->where('main_table.x < 1')
->orWhere('(main_table.x - main_table.y) >= ?',$qty);
Blockquote问题是我似乎无法将$qty绑定到:qty
事实上,这不是问题——这是PDO/MySQL引擎处理查询语句准备和绑定参数(分别提交)以及随后执行查询的方式。
因此,如果您使用绑定参数,则不需要在DB抽象层上生成最终查询语句
请参阅此stackoverflow问题和PDO手册。