Проверить настройки Skip to content

Фильтры коллекций Magento

Очень часто в CMS Magento (Мадженто) требуется отфильтровать коллекцию продуктов по свойствам(атрибутам).

В Magento есть метод(функция) addFieldToFilter() которая помогает фильтровать коллекции продуктов.

Пример простого фильтра для коллекции продуктов, выбрать из коллекции продуктов Magento, продукт у которого атрибут sku равен magentoSkuuu

Mage::getModel('catalog/product')
    ->getCollection()
    ->addFieldToFilter('sku',array('eq'=>'magentoSkuuu'))
    ->getSelect();

фильтр устанавливается методом addFieldToFilter(‘sku’,array(‘eq’=>’magentoSkuuu’))

где sku атрибут по которому необходимо фильтровать, второй параметр PHP массив в котором есть ключ — тип фильтрации и значение ключа «magentoSkuuu» параметр для фильтрации.

Ниже пример фильтров для коллекций продуктов Magento, а также эквивалент в SQL

array("eq"=>'magentoSkuuu')
WHERE (e.sku = 'magentoSkuuu')

array("neq"=>'magentoSkuuu')
WHERE (e.sku != 'magentoSkuuu')

array("like"=>'magentoSkuuu')
WHERE (e.sku like 'magentoSkuuu')

array("nlike"=>'magentoSkuuu')
WHERE (e.sku not like 'magentoSkuuu')

array("is"=>'magentoSkuuu')
WHERE (e.sku is 'magentoSkuuu')

array("in"=>array('magentoSkuuu'))
WHERE (e.sku in ('magentoSkuuu'))

array("nin"=>array('magentoSkuuu'))
WHERE (e.sku not in ('magentoSkuuu'))

array("notnull"=>'magentoSkuuu')
WHERE (e.sku is NOT NULL)

array("null"=>'magentoSkuuu')
WHERE (e.sku is NULL)

array("gt"=>'magentoSkuuu')
WHERE (e.sku > 'magentoSkuuu')

array("lt"=>'magentoSkuuu')
WHERE (e.sku < 'magentoSkuuu')

array("gteq"=>'magentoSkuuu')
WHERE (e.sku >= 'magentoSkuuu')

array("moreq"=>'magentoSkuuu')
WHERE (e.sku >= 'magentoSkuuu')

array("lteq"=>'magentoSkuuu')
WHERE (e.sku <= 'magentoSkuuu')

array("finset"=>array('magentoSkuuu'))
WHERE (find_in_set('magentoSkuuu',e.sku))

array('from'=>'10','to'=>'20')
WHERE e.sku >= '10' and e.sku <= '20'

Взято с http://blog.decryptweb.com/filters-query-magento/

Magento 1.*
  • Хыиуду

    Нелишним было бы еще сказать, что фильтры можно объединять как конъюнкцией, так и дизъюнкцией

    Mage :: getModel ( 'catalog/product' )
    -> getCollection ()
    -> addFieldToFilter ( 'vendor' ,array( "eq"=>"Sony"))
    -> addFieldToFilter ( 'price', array ( 'gt'=>15000))

    даст выборку where e.vendor=’Sony’ and e.price>=15000
    Mage :: getModel ( ‘catalog/product’ )
    -> getCollection ()
    -> addFieldToFilter ( ‘name’ , array ( array( «eq»=>»foobar»), array (‘like’ => ‘a%’))

    дает выборку where (name = ‘foobar’) or (name like ‘a%’)

  • Хыиуду

    А еще можно сделать выборку (vendor=’Fuji’) or (price>=15000):
    Mage :: getModel ( ‘catalog/product’ )
    -> getCollection ()
    -> addAttributeToFilter (
    array( array( 'attribute'=>'vendor', 'eq' => 'Fuji' ), array ('attribute'=>'price', 'gteq'=>15000)),
    NULL,
    'left'
    )