使用Magento 1.9.x,我正在尝试使用AND / OR语句创建一个ORM查询,它应该看起来像这样:
select a.*
FROM main_table a
where (a.updated is not null
a.updated BETWEEN '2012-11-01' AND '2012-12-01')
OR (a.updated is null
AND p.created_at BETWEEN '2012-11-01' and '2012-12-01')
我尝试了几种与此类似的不同实现,似乎找不到任何能让我获得更多数据的东西,而不是多个空括号集合。
$collection = Mage::getModel('main_table')->getCollection();
$collection->addFieldToFilter(array(
array('a.updated', 'notnull' => true),
array('a.created', 'notnull' => true)
));
$collection->load(true,true);
关于如何使这项工作的任何想法?
我见过几个人说要使用addAttributeToFilter,但是,只有当你在使用EAV表时才会使用它,这不是,所以我没有这个方法可供我使用。
答案 0 :(得分:1)
尝试
$collection = Mage::getModel('main_table')->getCollection();
$collection
->getSelect()
->where('a.updated is not null AND a.updated BETWEEN '2012-11-01' AND '2012-12-01')
->orWhere('a.updated is null AND p.created_at BETWEEN '2012-11-01' and '2012-12-01');
echo collection->getSelect(); //Check if select is the same what you want
你可以在带引号的条件下写得更好,这只是一个例子。 $ collection-> getSelect()是Zend_Db_Select(http://framework.zend.com/manual/1.12/ru/zend.db.select.html)