Magento MySQL - “OR”条件为两个addAttributeToFilter()

时间:2013-01-17 22:31:36

标签: php mysql magento conditional

在Magento,我需要在特定类别中获得没有特价的产品。

以下是我提出的建议:

<?php
$dateYesterday = date( 'm/d/y', mktime( 0, 0, 0, date( 'm' ), date( 'd' ) - 1, date( 'y' ) ) );

$catagoryModel = Mage::getModel( 'catalog/category' )->load( $currentCategoryId );

$productCollection = Mage::getResourceModel( 'catalog/product_collection' );

$productCollection->addAttributeToSelect( 'name' );

$productCollection->addCategoryFilter( $catagoryModel );

$productCollection->addAttributeToFilter( 'special_price', 
    array( 'eq' => '' ) 
);

$productCollection->addAttributeToFilter( 'special_to_date', 
    array( 'date' => true, 'to' => $dateYesterday ) 
);

?>

在上面的查询中,我需要在最后两个过滤器之间使用“OR”条件,语义如下:

$productCollection->addAttributeToFilter( 'special_price', 
array( 'eq' => '' ) );

// OR

$productCollection->addAttributeToFilter( 'special_to_date', 
array( 'date' => true, 'to' => $dateYesterday ) );

换句话说:

( special_price = '' OR special_to_date <= $dateYesterday )
你能帮忙吗?谢谢!

2 个答案:

答案 0 :(得分:3)

如果我记得很清楚,你需要使用一系列条件来创建OR 查看this link以了解我的意思 在你的情况下,你应该加入你的两个条件,如下

$productCollection->addAttributeToFilter(
                array(
                    array('attribute'=>'special_price', 'eq'=>''),
                    array('attribute'=>'special_to_date', 'date' => true, 'to' => $dateYesterday )
                )
            );

我没有Magento安装试试这个。
也许第二个条件应该略有不同。

答案 1 :(得分:1)

在这里查看(使用Magento馆藏的官方文档)

http://www.magentocommerce.com/wiki/1_-_installation_and_configuration/using_collections_in_magento

在你的例子中:

$productCollection->addAttributeToFilter(array(
    array(
        'attribute' => 'special_price',
        'eq'        => '',
        ),
    array(
        'attribute' => 'special_to_date',
        'date' => true,
        'to'      => $dateYesterday,
        ),
));