我现在可以使用此代码
->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')
))
但结果不符合我想要的日期结果不起作用,因为产品忽略到日期条件
我想在同一个集合中选择按日期和标志的产品
编辑产品清单
更新代码我会尝试
$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
答案 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,就像您在开始时所做的那样。如果你想两者都做,你只需要混合两种语法。