【问题标题】:OR and AND STATEMENT addAttributeToFilter magentoOR 和 AND STATEMENT addAttributeToFilter magento
【发布时间】:2012-07-02 18:44:29
【问题描述】:

我创建了以下代码。

$todayDate  = Mage::app()->getLocale()->date()->toString(Varien_Date::DATETIME_INTERNAL_FORMAT);
$tomorrow = mktime(0, 0, 0, date('m'), date('d')+1, date('y'));
$dateTomorrow = date('m/d/y', $tomorrow);

$collection = Mage::getResourceModel('catalog/product_collection');
$collection->setVisibility(Mage::getSingleton('catalog/product_visibility')->getVisibleInCatalogIds());

$collection = $this->_addProductAttributesAndPrices($collection)
->addStoreFilter()
->addAttributeToFilter('special_price', array('neq' => ""))
->addAttributeToFilter('special_from_date', array('date' => true, 'to' => $todayDate))
->addAttributeToFilter('special_to_date', array('or'=> array(0 => array('date' => true, 'from' => $dateTomorrow), 1 => array('is' => new Zend_Db_Expr('null')))), 'left');

这工作正常。但我现在想要的是使用 OR 语句。 我想我可以用这个来解决它:

$collection->addAttributeToFilter(array(
array('attribute'=> 'someattribute','like' => 'value'),
array('attribute'=> 'otherattribute','like' => 'value'),
array('attribute'=> 'anotherattribute','like' => 'value'),
));

但没有成功。 所以我的问题是如何添加 OR 语句。

$todayDate  = Mage::app()->getLocale()->date()->toString(Varien_Date::DATETIME_INTERNAL_FORMAT);
$tomorrow = mktime(0, 0, 0, date('m'), date('d')+1, date('y'));
$dateTomorrow = date('m/d/y', $tomorrow);

$collection = Mage::getResourceModel('catalog/product_collection');
$collection->setVisibility(Mage::getSingleton('catalog/product_visibility')->getVisibleInCatalogIds());

$collection = $this->_addProductAttributesAndPrices($collection)
->addStoreFilter()
->addAttributeToFilter('special_price', array('neq' => ""))
->addAttributeToFilter('special_from_date', array('date' => true, 'to' => $todayDate))
->addAttributeToFilter('special_to_date', array('or'=> array(0 => array('date' => true, 'from' => $dateTomorrow), 1 => array('is' => new Zend_Db_Expr('null')))), 'left');

谢谢。

太好了, 地法

【问题讨论】:

    标签: magento


    【解决方案1】:
    【解决方案2】:

    来自 Magento 维基:

    // Add OR condition:
    $collection->addAttributeToFilter(array(
        array(
            'attribute' => 'field_name',
            'in'        => array(1, 2, 3),
            ),
        array(
            'attribute' => 'date_field',
            'from'      => '2000-09-10',
            ),
        ));
    

    所以写你的查询,据我了解,是

    "....WHERE special_price <> "" AND special_from_date <= '2012-07-02' AND (special_to_date >= '2012-07-03' OR special_to_date IS NULL)..." 
    

    您将使用以下内容:

    $collection = $this->_addProductAttributesAndPrices($collection)
    ->addStoreFilter()
    ->addAttributeToFilter('special_price', array('neq' => ""))
    ->addAttributeToFilter('special_from_date', array('date' => true, 'to' => $todayDate))
    ->addAttributeToFilter(array(
        array(
            'attribute' => 'special_to_date',
            'date' => true,
            'from' => $dateTomorrow
        ),
        array(
            'attribute' => 'special_to_date',
            'null' => 1
        )
    ));
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-07-15
      • 1970-01-01
      • 2016-04-26
      • 1970-01-01
      • 1970-01-01
      • 2014-11-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多