关闭Magento集合OR条件

时间:2015-01-26 08:43:28

标签: php mysql magento magento-1.7

我现在可以使用此代码

->addAttributeToFilter('best_flag');

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

感谢大家的帮助

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

我的问题代码*

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

但我测试getselect sql代码是show

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')   
        ))

但结果不符合我想要的日期结果不起作用,因为产品忽略到日期条件

我想在同一个集合中选择按日期和标志的产品

编辑产品清单

  • 所有产品都是23
  • 在最佳范围内 - 最好到= 10
  • 如果只有flag = 7(只是不在-to的范围内)
  • 如果最好从= 23
  • 如果最好= 10
  • 这个集合的正确结果将有17

更新代码我会尝试

$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

3 个答案:

答案 0 :(得分:2)

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

$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')) 

答案 1 :(得分:1)

这应该是诀窍:

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

答案 2 :(得分:1)

关于您的更新,它无法正常工作,因为您将所有内容都切换为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,就像您在开始时所做的那样。如果你想两者都做,你只需要混合两种语法。