[英]Magento collection - filter by several fields
使用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的模型集合接口。 有时这是获得所需精确选择查询的唯一方法,但请记住,它可能不会与Magento模型界面正在进行100%凝聚。
当您使用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手册 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.