Php Magento集合-按多个字段筛选
使用Magentos集合模型,我应该如何添加查询部件/过滤器,例如:Php Magento集合-按多个字段筛选,php,zend-framework,magento,php-5.3,Php,Zend Framework,Magento,Php 5.3,使用Magentos集合模型,我应该如何添加查询部件/过滤器,例如: WHERE (main_table.x < 1 OR (main_table.x - main_table.y) >= 5) 当您使用getSelect方法时,您通过传递Magento的模型集合界面来完成。有时,这是获得所需的精确select查询的唯一方法,但请记住,它可能不会与Magento模型界面的操作完全一致 使用bindParamater方法时,您使用的是Magento模型界面。我无法告诉为什么它不工作,
WHERE (main_table.x < 1 OR (main_table.x - main_table.y) >= 5)
当您使用
getSelect
方法时,您通过传递Magento的模型集合界面来完成。有时,这是获得所需的精确select查询的唯一方法,但请记住,它可能不会与Magento模型界面的操作完全一致
使用bindParamater
方法时,您使用的是Magento模型界面。我无法告诉为什么它不工作,但我怀疑Zend select对象和Magento模型集合对象在不同的时间以不同的方式绑定其参数
要获得所需的结果,请跳过bindParamater
方法,并使用更简单的?
参数替换或where
方法
$this->getSelect()
->where('main_table.x < 1')
->orWhere('(main_table.x - main_table.y) >= ?',$qty);
$this->getSelect()
->其中('main_table.x<1')
->或其中('(main_table.x-main_table.y)>=?',$qty);
Blockquote问题是我似乎无法将$qty绑定到:qty
实际上这不是问题,而是PDO/MySQL引擎处理查询语句准备和绑定参数(分别提交)以及随后的查询执行的方式
因此,如果您使用绑定参数,则不需要在DB抽象层上生成最终的查询语句
看到这一点,.你是说它确实有效,我只是在执行查询之前打印查询,从而得到误导性的结果?是的,你不会看到带有插值绑定的查询字符串,这当然会让人恼火。要进行双重检查,请使用绑定参数按sku或产品ID减少集合查询。
SELECT ... WHERE ... AND ... AND (main_table.x < 1) OR ((main_table.x - main_table.y) >= :qty) ORDER BY ...
$this->getSelect()->where('(main_table.x < 1 OR (main_table.x - main_table.y) >= ?)', $qty);
$this->getSelect()
->where('main_table.x < 1')
->orWhere('(main_table.x - main_table.y) >= ?',$qty);