4

I'm getting all my active special products using this code that I've found somewhere:

  $collection = $this->_addProductAttributesAndPrices($collection)
 ->addStoreFilter()
 ->addAttributeToFilter('special_from_date', array('date' => true, 'to' => $todayDate))
 ->addAttributeToFilter('special_to_date', array('or'=> array(
    0 => array('date' => true, 'from' => $todayDate),
    1 => array('is' => new Zend_Db_Expr('null')))
 ), 'left')
 ->setPageSize($this->get_prod_count())
 ->setCurPage($this->get_cur_page());

Now I want to get only the products that have a special price <= price, however I still can't realize how to do it.

I've been reading this page: http://www.magentocommerce.com/wiki/5_-_modules_and_development/catalog/using_collections_in_magento

and I tried this without success:

     ->addAttributeToFilter('special_price', array('lt' => 'price'))

Thanks for your help!

Shaz
  • 2,647
  • 2
  • 35
  • 45

2 Answers2

8

You can try this, thanks for Zyava!

On my case:

 ->addAttributeToFilter('price', ['gt' => new Zend_Db_Expr('final_price')])
Katapofatico
  • 750
  • 1
  • 10
  • 29
0

A lesser efficient solution would be to iterate through the collection,

$products = array();
$collection = Mage::getResourceModel('catalog/product_collection');
foreach($collection as $col) {
    $product = Mage::getModel('catalog/product')->load($col->getId());
    if( $product->getPrice() > $product->getSpecialPrice() ) {
        $products[] = $product;
    }
 }

you will have an array of products in the end...

Nasaralla
  • 1,839
  • 13
  • 11