如何过滤日期的Magento集合或null

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何过滤日期的Magento集合或null相关的知识,希望对你有一定的参考价值。

我有一些Magento代码,我正试图用来过滤一系列产品。我想找到所有产品,其中日期是在特定日期之前或日期尚未设置(即为空)。

我有:

function getProduct($product_id) {
	global $proxy, $sessionId, $conn, $start_date, $time_to_run;
	if ($product_id == 'all') {
		$result=Mage::getModel("catalog/product")
		  ->getCollection()
		  ->addAttributeToSelect('*')
                  ->addAttributeToFilter('price_adjust_active', array('null' => true))
		  ->addAttributeToFilter('price_adjust_active', '1')
		  ->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)
    ))
		  ->addAttributeToFilter('status', array('eq' => Mage_Catalog_Model_Product_Status::STATUS_ENABLED))      
		  ->setOrder('entity_id', 'DESC')
		  ->setPageSize(1);
    } else {
    	
		$result=Mage::getModel("catalog/product")
		  ->getCollection()
		  ->addAttributeToSelect('*')
		  ->addAttributeToFilter('entity_id', array('eq' => $product_id))
                  ->addAttributeToFilter('price_adjust_active', array('null' => true))
		  ->addAttributeToFilter('price_adjust_active', '1')
		  ->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)
    ))
		  ->addAttributeToFilter('status', array('eq' => Mage_Catalog_Model_Product_Status::STATUS_ENABLED))      
		  ->setOrder('entity_id', 'DESC')
		  ->setPageSize(1);
	}	

我可以成功过滤掉在指定日期之前设置的日期的产品。我只是无法获得“null”属性。从我的代码中可以看出,我有两个不同的过滤器,它们似乎都没有给我想要的结果。

两个错误的尝试是:

- > addAttributeToFilter('price_adjust_active',array('null'=> true))

要么

array('attribute'=>'price_adjust_last_run','null'=> true)

答案

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')

你将date设置为true然后你可能想确保从你的$time_to_run变量中减去1秒。

这与addFieldToFilter()的工作方式类似。

以上是关于如何过滤日期的Magento集合或null的主要内容,如果未能解决你的问题,请参考以下文章

过滤 Magento 集合而不是产品,使用 distinct

Magento模型集合addFieldToFilter常用过滤条件

使用集合过滤器和操作方法的Magento

Magento JOIN 在两个过滤的自定义集合之间

Magento:以编程方式从属性集中删除属性

markdown [magento] - 代码片段