我正在尝试使用一些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)
答案 0 :(得分:1)
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()
的工作方式类似。