Фильтр Magento по относительной стоимости - PullRequest
2 голосов
/ 03 октября 2011

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

SELECT * FROM table WHERE column_1 > column_2

Единственное, что я умею делать в Magento, это

$q = Mage::getModel('table')->getCollection()
         ->addAttributeToFilter('column_1', array('gt' => $some_number));

или что-то в этом роде.Я могу дать только значение для сравнения, а не имя столбца.Я также посмотрел на метод Zend_Db_Select в предложении where, но не нашел ничего, что могло бы помочь.Должен ли я на самом деле пройти весь путь до прямого SQL-запроса (чего, конечно, избегают любой ценой)?(Я использую Magento 1.3.2.4)

Спасибо.

Ответы [ 2 ]

3 голосов
/ 05 октября 2011

Попробуйте что-то вроде

$q = Mage::getModel('table')->getCollection()
    ->addAttributeToSelect('column_1')
    ->addAttributeToSelect('column_2')
    ->addAttributeToFilter('column_1', array('gt' => Zend_Db_Expr('`column_2`')));
0 голосов
/ 03 октября 2011

Хорошо, это, вероятно, не идеальное решение, но это один из способов получить то, что вам нужно.

Вот так я получил коллекцию продуктов, которые были в продаже, где конечная цена продукта ниже его цены.

Сначала я сделал новый пустой сбор данных. Затем определил коллекцию, которую я собирался пройти через фильтрацию, что я мог сначала. После этого я просмотрел эту коллекцию, и все продукты, соответствующие моим требованиям, были добавлены в пустую коллекцию.

    $this->_itemCollection = new Varien_Data_Collection();

    $collection = Mage::getResourceModel('catalog/product_collection');
    $collection->setVisibility(Mage::getSingleton('catalog/product_visibility')->getVisibleInCatalogIds());

    $category = Mage::getModel('catalog/category')->load($this->getCategoryId());

    $collection = $this->_addProductAttributesAndPrices($collection)
        ->addStoreFilter()
        ->addCategoryFilter($category)
        ->addAttributeToSort('position', 'asc');

    $i=0;
    foreach($collection as $product){
        if($product->getFinalPrice() > $product->getPrice() && !$this->_itemCollection->getItemById($product->getId())){    
            $this->_itemCollection->addItem($product);
            $i++;
        }

        if($i==$this->getProductsCount()){
            break;
        }
    }

    $this->setProductCollection($this->_itemCollection);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...