2017-01-04 1 views
0

У меня есть код Magento, который я пытаюсь использовать для фильтрации коллекции продуктов. Я хочу найти все продукты, в которых дата предшествует определенной дате, или дата не была установлена ​​(т.е. равна нулю).Как фильтровать коллекцию Magento для даты или null

у меня есть:

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', массив ('NULL' => правда))

или

массив ('атрибут' => «price_adjust_last_run ',' null '=> true)

+0

использование может использовать как этот -> addAttributeToFilter ('news_from_date', массив ('или' => массив ( 0 => Array ('дата' => верно, 'до' => $ 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') 

Вы устанавливаете date в true и тогда вы, вероятно, хотите, чтобы убедиться, вычесть 1 секунду из вашей $time_to_run переменной.

Это работает аналогично addFieldToFilter().

 Смежные вопросы

  • Нет связанных вопросов^_^