2017-01-04 56 views
0

我有一些Magento代碼,我試圖用來過濾一組產品。我想查找日期在某個日期之前或日期尚未設置(即爲空)的所有產品。如何過濾日期或null的Magento集合

我:

function getProduct($product_id) { 
 
\t global $proxy, $sessionId, $conn, $start_date, $time_to_run; 
 
\t if ($product_id == 'all') { 
 
\t \t $result=Mage::getModel("catalog/product") 
 
\t \t ->getCollection() 
 
\t \t ->addAttributeToSelect('*') 
 
        ->addAttributeToFilter('price_adjust_active', array('null' => true)) 
 
\t \t ->addAttributeToFilter('price_adjust_active', '1') 
 
\t \t ->addAttributeToFilter(array(
 
     array('attribute'=> 'price_adjust_last_run','lt' => date('Y-m-d H:i:s', $time_to_run)), 
 
     array('attribute'=> 'price_adjust_last_run', 'null' => true) 
 
    )) 
 
\t \t ->addAttributeToFilter('status', array('eq' => Mage_Catalog_Model_Product_Status::STATUS_ENABLED))  
 
\t \t ->setOrder('entity_id', 'DESC') 
 
\t \t ->setPageSize(1); 
 
    } else { 
 
    \t 
 
\t \t $result=Mage::getModel("catalog/product") 
 
\t \t ->getCollection() 
 
\t \t ->addAttributeToSelect('*') 
 
\t \t ->addAttributeToFilter('entity_id', array('eq' => $product_id)) 
 
        ->addAttributeToFilter('price_adjust_active', array('null' => true)) 
 
\t \t ->addAttributeToFilter('price_adjust_active', '1') 
 
\t \t ->addAttributeToFilter(array(
 
     array('attribute'=> 'price_adjust_last_run','lt' => date('Y-m-d H:i:s', $time_to_run)), 
 
     array('attribute'=> 'price_adjust_last_run', 'null' => true) 
 
    )) 
 
\t \t ->addAttributeToFilter('status', array('eq' => Mage_Catalog_Model_Product_Status::STATUS_ENABLED))  
 
\t \t ->setOrder('entity_id', 'DESC') 
 
\t \t ->setPageSize(1); 
 
\t } \t

,我可以成功地過濾掉我指定的日期前,設置日期的產品。我不能讓「null」屬性起作用。正如你從我的代碼中可以看到的那樣,我有兩個不同的過濾器,而且他們都沒有給我想要的結果。

兩個有故障的嘗試是:

- > addAttributeToFilter( 'price_adjust_active',陣列( '零'=>真))

陣列( '屬性'=>「price_adjust_last_run ','null'=> true)

+0

使用可以使用這樣 - > addAttributeToFilter( 'news_from_date',陣列( '或'=>數組( 0 =>數組( '日期'=>真, '至'=> $ todayEndOfDayDate) 1 => array('is'=> new Zend_Db_Expr('null'))) ),'left') – faizanbeg

+0

您可以在此文件中找到代碼 app \ code \ core \ Mage \ Catalog \ Block \ Product \ New.php – faizanbeg

回答

0

Magento有一種特殊的方式來過濾日期,而不是使用直線大於或小於。

嘗試......

->addAttributeToFilter('price_adjust_last_run', array('or'=> array(
    0 => array(
     'date' => true, 
     'from' => date('Y-m-d H:i:s', $time_to_run - 1) 
    ), 
    1 => array('is' => new Zend_Db_Expr('null'))) 
), 'left') 

要設置datetrue,然後你可能會想,以確保從您的$time_to_run變量減去1秒。

這與addFieldToFilter()的作用相似。