Using Magentos collection models, how should I go about adding a query part/filter such as this:
WHERE (main_table.x < 1 OR (main_table.x - main_table.y) >= 5)
Update
I’m now running this:
$this->getSelect()
->where('main_table.x < 1')
->orWhere('(main_table.x - main_table.y) >= :qty');
$this->addBindParam(':qty', $qty);
Result:
SELECT ... WHERE ... AND ... AND (main_table.x < 1) OR ((main_table.x - main_table.y) >= :qty) ORDER BY ...
The issue is that I can’t seem to get to bind $qty to :qty
Update 2
I ended up with this, since I needed the OR within parentheses
$this->getSelect()->where('(main_table.x < 1 OR (main_table.x - main_table.y) >= ?)', $qty);
When you use the
getSelectmethod you’re by-passing Magento’s model collection interface. Sometimes this is the only way to get the exact select query you want, but keep in mind it may not gel 100% with what the Magento model interface is doing.When you use the
bindParamatermethod you’re using the Magento model interface. I can’t speak to why it’s not working, but I suspect the Zend select object and the Magento model collection objects bind their paramaters at different times, and in a different way.To get the results you want, skip the
bindParamatermethod and use the simpler?parameter replacement of theorWheremethod.