Magento集合 - 按几个字段过滤

Vit*_*min 7 php zend-framework magento php-5.3

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

WHERE (main_table.x < 1 OR (main_table.x - main_table.y) >= 5)
Run Code Online (Sandbox Code Playgroud)

更新 我现在运行这个:

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

结果:

SELECT ... WHERE ... AND ... AND (main_table.x < 1) OR ((main_table.x - main_table.y) >= :qty) ORDER BY ...
Run Code Online (Sandbox Code Playgroud)

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

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

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

Ala*_*orm 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);
Run Code Online (Sandbox Code Playgroud)