关闭 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 在同一系列中按日期和标志制作产品
编辑产品列表
- 所有产品都是23
- 最佳范围从 - 最佳到 = 10
- 如果只有标志 = 7(只是不在从 - 到的范围内)
- if only best from = 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
这应该是诀窍:
->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,就像您在开始时所做的那样。如果你想两者都做,你只需要混合两种语法。
我现在可以做到了我使用了这个代码
->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 在同一系列中按日期和标志制作产品
编辑产品列表
- 所有产品都是23
- 最佳范围从 - 最佳到 = 10
- 如果只有标志 = 7(只是不在从 - 到的范围内)
- if only best from = 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
这应该是诀窍:
->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,就像您在开始时所做的那样。如果你想两者都做,你只需要混合两种语法。