Magento: вычитание и деление на addAttributeToFilter

Я новичок в Magento getResourceModel и пытаюсь добавить простой фильтр в свой запрос, но не могу понять это с помощью getResourceModel.

Исходный запрос:

$collection = Mage::getResourceModel('catalog/product_collection');
Mage::getModel('catalog/layer')->prepareProductCollection($collection);
$collection->addAttributeToFilter('promotion', 1)->setOrder('price', 'desc');

Я просто хочу добавить предложение where:

 (`price` - `final_price`) >= (`price` * 0.4) 

Кто-нибудь может помочь мне сделать это?

Это все, спасибо!


person Rodrigo Balero    schedule 23.10.2012    source источник
comment
Возможно, это немного поможет: blog.onlinebizsoft.com/   -  person feeela    schedule 23.10.2012
comment
Спасибо, чувствую, я видел один такой пост в блоге, и я посещаю официальный документ magento. Но я не могу найти, как выполнять простые операции, такие как деление и вычитание.   -  person Rodrigo Balero    schedule 23.10.2012
comment
Я не знаю, возможно ли это даже с использованием Varien_Data_Collection_Db (который является базовым классом любых коллекций в Magento), но я предполагаю, что вам нужно изменить SELECT вручную. $collection->getSelect() должен вернуть экземпляр Varien_Db_Select — посмотрите на этот класс в /lib/Varien/Db/Select.php.   -  person feeela    schedule 24.10.2012
comment
Еще раз спасибо @feeela! То, что я делаю, это правильно. Но этот запрос извлекает список продуктов в файл: ../template/catalog/product/list.php, и ожидаемый массив, который мне предоставляет ручной выбор, отличается от значения по умолчанию.   -  person Rodrigo Balero    schedule 24.10.2012
comment
Я создаю новый файл list.php, потому что этот новый файл будет отображаться в новом разделе, в разделе продвижения. И я адаптирую этот новый файл для работы с запросом вручную. Большое спасибо @feeela.   -  person Rodrigo Balero    schedule 24.10.2012


Ответы (1)


Итак, наконец, я нашел правильный способ сделать это, извините за задержку с публикацией ответа здесь и спасибо @feeela.

Просматривая файл /lib/Zend/Db/Select.php, я обнаружил, что существует функция where:

public function where($cond, $value = null, $type = null)
{
  $this->_parts[self::WHERE][] = $this->_where($cond, $value, $type, true);

  return $this;
}

Итак, что нам нужно, так это просто добавить вызов этой функции, дающий желаемое условие. В моем случае я просто добавляю условие для фильтрации товаров со скидкой 40%.

$collection = Mage::getResourceModel('catalog/product_collection');
Mage::getModel('catalog/layer')->prepareProductCollection($collection);
$collection->addAttributeToFilter('promotion', 1)
           ->addStoreFilter();
$collection->getSelect()->where( '(`price` - `final_price`) >= (`price` * 0.4)' ); 

Итак, я надеюсь, что это может быть полезно для некоторых парней!

Грацие тутти!

person Rodrigo Balero    schedule 26.10.2012