Поиск…


параметры

параметр подробности
$ addFieldToFilter ( $ field , $ condition = null) {string} Поле, добавляемое в фильтр.
$ addFieldToFilter ($ field, $ condition = null ) {mixed} Определение фильтра, который мы будем использовать.
addAttributeToFilter ( $ attr , $ condition = null, $ join = 'inner') {string} Поле, добавляемое в фильтр.
addAttributeToFilter ($ attr, $ condition = null , $ join = 'inner') {mixed} Определение фильтра, который мы будем использовать.
addAttributeToFilter ($ attr, $ condition = null, $ join = 'inner' ) {('inner', 'left')} Тип соединения sql для использования при подключении таблицы EAV.

замечания

Аргументы сравнения фильтров

Magento также предлагает гибкий способ фильтрации с использованием операторов сравнения. Вот список действительных операторов и их синтаксис:

Все сравнительные аргументы могут быть переданы во второй параметр методов addFieldToFielter() или addAttributeToFilter() .

$collection_of_products->addAttributeToFilter('visible',array("eq"=>1));
сравнение Argument Array Результат SQL Snippet
Равно массив ( "эк" => $ вар) WHERE (`my_field` = $ var)
Не равный массив ( "NEQ" => $ вар) WHERE (`my_field`! = $ Var)
подобно массив ( "как" => $ вар) WHERE (`my_field` LIKE $ var)
Не как массив ( "Nlike" => $ вар) WHERE (`my_field` НЕ НРАВИТСЯ $ var)
Является массив ( "есть" => $ вар) WHERE (`my_field` IS $ var)
В массив ( "в" => $ вар) WHERE (`my_field` IN ($ var))
Не в массив ( "нин" => $ вар) WHERE (`my_field` NOT IN ($ var))
Ноль массив ( "нуль" => правда) WHERE (`my_field` IS NULL)
Ненулевой массив ( "NotNull" => правда) ГДЕ (`my_field` НЕ НЕТ)
Лучше чем Массив ( "GT" => $ вар) WHERE (`my_field`> $ var)
Меньше, чем Массив ( "л" => $ вар) WHERE (`my_field` <$ var)
Больше или равно массив ( "gteq" => $ вар) WHERE (`my_field`> = $ var)
Меньше или равно массив ( "lteq" => $ вар) WHERE (`my_field` <= $ var)
Найти в Set массив ( "finset" => массив ($ Var)) WHERE (find_in_set ($ var, `my_field`)
От и до array ("from" => $ var1, "to" => $ var2) WHERE (`my_field`> = $ var1 AND` my_field` <= $ var2)

Фильтрация коллекций

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

В Magento Заказы не сохраняются как объекты EAV. Это делает коллекцию заказов хорошим примером для фильтрации основной коллекции.

$collection_of_orders = Mage::getModel('sales/order')->getCollection();
$collection_of_orders->addFieldToFilter('status','processing');

Если мы посмотрим на коллекцию продуктов, мы увидим, что продукты хранятся в модели данных EAV. Мы также можем легко фильтровать атрибуты EAV.

$collection_of_products = Mage::getModel('catalog/product')->getCollection();
$collection_of_products->addAttributeToFilter('visible',1);

Обработка AND и OR в фильтрах

Когда мы запрашиваем наши данные, нам часто требуется более одного фильтра, чтобы получить точный набор данных, который мы ищем. В SQL мы обрабатываем это с помощью предложений AND и OR. Мы можем сделать то же самое с коллекциями.

Чтобы добавить предложение AND к вашему запросу, просто добавьте другой вызов метода. Это добавит второй фильтр к исходному оператору WHERE, соединяющему его с AND.

Mage::getModel('catalog/product')->getCollection()
        ->addFieldToFilter('sku',array('like'=>'a%'))
        ->addFieldToFilter('sku',array('like'=>'%b'));

В результате предложение WHERE будет выглядеть так:

WHERE (e.sku like 'a%') AND (e.sku like '%b')

Теперь давайте скажем, что мы хотим, чтобы все skus начинались с 'a' OR end с 'b'. Как мы добавляем предложение OR? Благодаря коллекциям Magento это довольно прямолинейно. Мы добавляем фильтр как второй элемент в массив фильтров.

Mage::getModel('catalog/product')->getCollection()
        ->addFieldToFilter('sku', array(
            array('like'=>'a%'), 
            array('like'=>'%b')
        ));

Теперь получившееся предложение WHERE будет выглядеть так:

WHERE (((e.sku like 'a%') or (e.sku like '%b'))) 


Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow