使用Magento添加多个AND / OR语句

时间:2013-12-10 19:39:54

标签: magento

使用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表时才会使用它,这不是,所以我没有这个方法可供我使用。

1 个答案:

答案 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