关闭 Magento 集合或条件

CLOSED Magento collection OR condition

我现在可以做到了我使用了这个代码

->addAttributeToFilter('best_flag');

$collection->getSelect()->orwhere("at_best_flag. VALUE = '1'"); 

谢谢大家的帮助

我如何在我的代码中使用 OR 条件

我的问题代码*

->addAttributeToFilter('best_flag', array('eq' => '1') )

但我测试得到select sql 代码显示

AND(at_best_flag. VALUE = '1')

我想将 AND 更改为 OR 我可以为此代码设置条件吗?

问这个问题后更新我尝试使用此代码但不起作用

->addAttributeToFilter(array(
            array('attribute' =>'best_flag', array('eq' => '1')),
            array('attribute' =>'best_from_date', array('date' => true, 'to' => $todayDate)),
            array('attribute' =>'best_to_date', array('or'=> array(
                0 => array('date' => true, 'from' => $todayDate),
                1 => array('is' => new Zend_Db_Expr('null')))
                ), 'left')   
        ))

但结果与我想要的不匹配日期结果无效,因为产品忽略了日期条件

我想 select 在同一系列中按日期和标志制作产品

编辑产品列表

我会尝试更新代码

$collection->addAttributeToFilter(array(
            array('attribute' =>'best_from_date', array('date' => true, 'to' => $todayDate))),
            array('attribute' =>'best_to_date', array('or'=> array(
                0 => array('date' => true, 'from' => $todayDate),
                1 => array('is' => new Zend_Db_Expr('null')))
                ), 'left')   
        )
          ->addAttributeToFilter('best_flag', array('eq' => '1'));

结果 = 7

->addAttributeToFilter(array(
            array('attribute' =>'best_flag', array('eq' => '1')),
            array('attribute' =>'best_to_date', array('or'=> array(
            0 => array('date' => true, 'from' => $todayDate),
            1 => array('is' => new Zend_Db_Expr('null')))
        ), 'left')
            ))
        ->addAttributeToFilter(array(
            array('attribute' =>'best_flag', array('eq' => '1')),
            array('attribute' =>'best_from_date', array('date' => true, 'to' => $todayDate))
            ))

结果 = 23

->addAttributeToFilter('best_to_date', array('or'=> array(
            0 => array('date' => true, 'from' => $todayDate),
            1 => array('is' => new Zend_Db_Expr('null')))
        ), 'left')    
        ->addAttributeToFilter(array(
            array('attribute' =>'best_flag', array('eq' => '1')),
            array('attribute' =>'best_from_date', array('date' => true, 'to' => $todayDate))
            ))

结果 = 10

->addAttributeToFilter(array(
            array('attribute' =>'best_flag', array('eq' => '1')),
            array('attribute' =>'best_to_date', array('or'=> array(
            0 => array('date' => true, 'from' => $todayDate),
            1 => array('is' => new Zend_Db_Expr('null')))
        ), 'left')
            ))
        ->addAttributeToFilter('best_from_date', array('date' => true, 'to' => $todayDate))

结果 = 23

这应该是诀窍:

->addAttributeToFilter('best_flag', array('in' => array(1,2,3,4)))

您可以将此代码用于或条件

$collection->addAttributeToFilter(
array(
    array('attribute'=> 'attribute1','like' => 'value1'),
    array('attribute'=> 'attribute2','like' => 'value2'),
    array('attribute'=> 'attribute3','like' => 'value3'),
 )
);

这将输出格式为的 WHERE 子句:

WHERE ((attribute1 LIKE 'value1') OR (attribute2 LIKE 'value2') OR (attribute3 LIKE 'value3')) 

关于您的更新,它不起作用,因为您将所有内容都切换为 OR 语句。试试这个:

$yourmodel->addAttributeToFilter(array(
            array('attribute' =>'best_from_date', array('date' => true, 'to' => $todayDate))),
            array('attribute' =>'best_to_date', array('or'=> array(
                0 => array('date' => true, 'from' => $todayDate),
                1 => array('is' => new Zend_Db_Expr('null')))
                ), 'left')   
        )
          ->addAttributeToFilter('best_flag', array('eq' => '1'));

这将呈现 (best_from date OR best_to_date) AND best_flag 正如我所说,如果您使用@Emipro Technologies 的答案,您将获得 OR,如果您链​​接 ->addAttributeToFilter(),您将获得 AND,就像您在开始时所做的那样。如果你想两者都做,你只需要混合两种语法。